0

重複の可能性:
ループ内の Javascript クロージャー - 簡単な実用例

for (i = 0; i < 100; i++) {
    setTimeout(function() {
        console.log(i);
    }, 500)
}

上記のコードでは、100 しか出力されません。その理由はわかっています。しかし、現在の i 値をコールバックに送信するにはどうすればよいsetTimeoutですか?

4

4 に答える 4

2

ループ内で無名関数を使用して、クロージャを作成します。

for (i = 0; i < 100; i++) {

  (function(i){

    window.setTimeout(function() {
      console.log(i);
    }, 500)

  })(i);

}

呼び出し時に値を関数に渡すと、値がコピーされ、関数の各インスタンスには、ループカウンターが変更されても変更されない独自のコピーがあります。

于 2012-09-22T19:33:38.107 に答える
1

setTimeout は、 callback に渡されるパラメーターを受け入れます

for (i=0;i<100;i++){
    setTimeout(function(i){
        console.log(i);
    },500, i)
}
于 2012-09-22T19:32:53.980 に答える
0

これは機能します:

for (var i = 0; i < 100; i++) {
    (function(i) {
        setTimeout(function() {
            console.log(i);
        }, 500);
    })(i);
}​
于 2012-09-22T19:33:16.337 に答える
0
for (i = 0; i < 100; i++) {
    setTimeout((function(i) {
        return function(){
            console.log(i);
        }
    })(i), 500)
}
于 2012-09-22T19:33:50.783 に答える