JavaScriptで継続番号を表示したい。
このために、私は次の例を開発しました。
for(var i=0; i<100; i++) {
window.setTimeout(function() {
alert(i);
},1000*i);
}
残念ながら、100という数字は毎回表示されます。i
参考だからだと思いますか?
パラメータの受け渡しでこれをどのように変更できますか?
JavaScriptで継続番号を表示したい。
このために、私は次の例を開発しました。
for(var i=0; i<100; i++) {
window.setTimeout(function() {
alert(i);
},1000*i);
}
残念ながら、100という数字は毎回表示されます。i
参考だからだと思いますか?
パラメータの受け渡しでこれをどのように変更できますか?
問題は、タイムアウトが期限切れになる前に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));
}