0

重複の可能性:
Javascript の閉鎖?

以前にも質問されたかもしれませんが…

関数のリストが必要な場合

var funs = [
  function(){ console.log(1); },
  function(){ console.log(2); },
  function(){ console.log(3); },
  function(){ console.log(4); },
  function(){ console.log(5); } ]

次のような方法で作成できるようです。

var funs = [];
for(var i=1; i <= 5; i++){
  funs.push(function(){ console.log(i) };
}

i変数はすべての関数にバインドされた単一の変数であるため、これは機能しません。

funs[0](); funs[1](); funs[2](); funs[3](); funs[4]();

出力

6
6
6
6
6

いいえ

1
2
3
4
5

これは私が望む出力ではありません。iの参照で閉じるのではなく、関数の作成時にjavascript が の値のコピーをバインドするように強制する必要があると思いますi。どうすればいいですか?

4

1 に答える 1

3

最も簡単な方法は、関数を自己実行関数の引数に渡すことです。

for(...) {
    (function(i) {
        // here you have a new i in every loop
    })(i);
}
于 2012-12-09T18:45:55.240 に答える