AsynFunc() 被放置在调用堆栈上 10 次。每个调用都包含其中定义的所有变量和函数的本地化副本。因此,它们不共享状态并“被覆盖”。
除了对全局名称空间内的对象的任何引用之外,这些调用彼此不共享任何状态。
编辑:
他们可能“分享”的示例:
var mySharedVariable = 0;
function AsyncFunc(args) {
var myLocalVariable = mySharedVariable++;
console.log(myLocalVariable);
// do some asynchronous task that i'm too lazy to code for the example as it's not relevant
}
for(var i = 0; i < 10; i++)
AsyncFunc(i);
console.log(mySharedVariable);
正如您在此处看到的,如果我们要mySharedVariable
在最后输出,它将输出 10。但是,如果我们输出,myLocalVariable
我们会看到类似于 0、1、2、3、4、5、6、7、8、9 的东西因为它们是局部变量并且不共享状态。
编辑:
jQuery 异步调用示例:
for (var i = 0; i < 10; i++)
$.post('someURL', function(response) {
var myLocalVariable = response.data;
//the data returned is not a copy, it's an individual instance per call invoked.
//neither is myLocalVariable shared, each invocation of this callback has it's own memory allocated to store its value
});
编辑:
对于您最近的问题,每个data
对象在获取请求后对于每个回调都是唯一的。但是,您的代码不能向我保证args
每次传入的变量都不同,因此您的实现有可能导致args.data
被每个回调覆盖。因此,请查看下面的另一个选项,以确保您data
正确存储回调中的所有对象。
var args = [];
function AsyncFunc(args){
$.get(args.url, function(data){
args.push(data);
});
}
//now args will have 10 uniquely different data objects stored inside.