0

我想用 JavaScript 显示一个正在进行的数字。

为此,我开发了以下示例:

for(var i=0; i<100; i++) {
  window.setTimeout(function() {
    alert(i);
  },1000*i);
}

不幸的是,每次都显示数字 100。我想是因为i是参考?

在参数传递中如何更改?

4

1 回答 1

1

问题是 JS 不会等待并在超时到期之前继续完成循环。到那时,i已经是100了。

要解决此问题,您的超时应具有i. 这样,它不会引用到i那时已经 100 的 ,而是i在循环的那个时候引用。

for(var i=0; i<100; i++) {
  (function(i){
    //shadowing the loop-i with the function-i
    window.setTimeout(function() {
      //thus, this callback is referencing the i from the function
      //and not the loop's i
      alert(i);
    },1000*i);
  }(i));
}
于 2013-02-11T12:03:39.470 回答