我正在迭代一个数组,并为每个元素做一些调用回调的东西.我的问题是在回调中,我需要知道迭代的哪个传递.
简化,我的代码看起来像这样......
for (var i=0; i<3; i++ {
setTimeout(function () {
console.log(i);
},1000);
}
Run Code Online (Sandbox Code Playgroud)
我想要看到
0
1
2
Run Code Online (Sandbox Code Playgroud)
我得到的是
3
3
3
Run Code Online (Sandbox Code Playgroud)
我理解为什么我得到3分,但看不出如何获得0,1,2
NB.这是我的问题的简化版本.在myapp中,我实际上是在调用存储操作,所以我不能简单地将"i"作为回调函数的参数.
您需要在迭代时捕获值,因为JS具有函数作用域,因此它与i您引用的相同.(并且您不希望这样.因此您需要创建一个闭包.
for (var i = 0; i < 3; i++) {
(function (a) {
setTimeout(function () {
console.log(a);
}, 1000);
})(i);
}
Run Code Online (Sandbox Code Playgroud)