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 に答える