最简单的方法是使用闭包。每当循环中有异步的东西时,它都是同一件事。
for (var i .....) { asynchronousFunction(function() { use(i); }}在此伪代码段中,内部函数捕获引用的_存储位置_
i。循环运行,
i递增到其最终值,然后开始调用异步回调,所有这些回调都查找完全相同的 位置(而不是值)。
通用解决方案是这样的:
for (var i .....) { (function (i) { asynchronousFunction(function() { use(i); }); })(i);}将循环的全部内容包装在一个自执行函数中。
在这里,outer 的_值_
i被传递给包装的自执行匿名函数;这个唯一值的位置被异步回调捕获。这样,每个异步都会获得自己的值,该值是在调用自执行函数时确定的。



