Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当cb异步运行时,为什么仍然定义此var?_Javascript_Asynchronous_Callback_Namespaces - Fatal编程技术网

Javascript 当cb异步运行时,为什么仍然定义此var?

Javascript 当cb异步运行时,为什么仍然定义此var?,javascript,asynchronous,callback,namespaces,Javascript,Asynchronous,Callback,Namespaces,这恰好是一个Chrome扩展,但我相信这是一个相关的一般问题。我有一个这样的工作func来访问本地存储: function loadItem(sName, callback){ var get = {}; get[sName] = {}; //blank obj by default. chrome.storage.local.get(get, function(data) { data[sName] && callback(data[sN

这恰好是一个Chrome扩展,但我相信这是一个相关的一般问题。我有一个这样的工作func来访问本地存储:

function loadItem(sName, callback){
    var get = {};
    get[sName] = {}; //blank obj by default.
    chrome.storage.local.get(get, function(data) {
        data[sName] && callback(data[sName]);
    });
};

在异步调用外部回调中调用loadItem的回调时,我使用loadItem的arg sName。为什么会有这样的定义?异步回调不应该识别该var吗?因为loadItem已完成运行,并且sName未作为回调自己的参数之一提供?

这就是所谓的闭包。在本例中,您发送以获取的回调将捕获原始函数loadItem的本地范围内的变量,以便即使在原始函数完成执行后,它们仍然可以在回调中使用。有关更多信息,请参见

我真的应该知道这一点,感谢您迅速澄清这一点;