私はこのようなことをしたい:
for(var i=0;i
もちろん、javascriptにはスリープ機能はありませんので、私は次のことを試しました:
for(var i=0;i
しかし、aList [i]は定義されていません。無名関数はクロージャであるため、実際にはaList
[i]を外部関数のスコープから読み込んでいるため、setTimeoutの関数が実行されるまでに i
は既に変更されています。
これを達成する方法は何ですか?
ベストアンサー
JavaScript 1.7の let
をエミュレートするクイックフィックスは、関数内にラップすることです。
for(var i=0; i < aList.length; i++) {
(function(i) {
setTimeout(function() {
aList[i].doSomething();
}, 500 * i);//<-- You need to multiply by i here.
})(i);
}
また、スクリプトが500秒間ポーズした後、すべてを実行する小さなバグに修正を加えました。
setTimeout
は非ブロックです。