Javascript反復リスト操作でsetTimeoutを使用する方法は?

私はこのようなことをしたい:

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 は非ブロックです。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です