如何将递增值传递给回调

pin*_*yid 1 javascript

我正在迭代一个数组,并为每个元素做一些调用回调的东西.我的问题是在回调中,我需要知道迭代的哪个传递.

简化,我的代码看起来像这样......

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"作为回调函数的参数.

Roy*_*mir 5

您需要在迭代时捕获值,因为JS具有函数作用域,因此它与i您引用的相同.(并且您不希望这样.因此您需要创建一个闭包.

for (var i = 0; i < 3; i++) {
    (function (a) {
        setTimeout(function () {
            console.log(a);
        }, 1000);
    })(i);
}
Run Code Online (Sandbox Code Playgroud)