0

次のスニペットでエラーが発生する理由がわかりません (ループ内の JavaScript クロージャーから適応 – 簡単な実用例):

var funcs = {};
for (var i = 0; i < 3; i++) {          // let's create 3 functions
    funcs[i] = (function(n) {            // and store them in funcs
        console.log("My value: " + n); // each should log its value.
    })(i);
}
for (var j = 0; j < 3; j++) {
    funcs[j]();                        // and now let's run each one to see
}

これは問題なく動作するはずです。私はこれが私が完全に得られないものであることを知っています.

ここに私が得るエラーがあります: ここに画像の説明を入力

任意の助けのためのthx

4

1 に答える 1

2

関数の結果ではなく、関数を返す必要があります。試す:

funcs[i] = (function(n) {
  return function() { 
    console.log("My value: " + n); 
  }
})(i);

例:

> var funcs = {};
for (var i = 0; i < 3; i++) {
  funcs[i] = (function(n) { 
    return function() {console.log("My value: " + n);} 
  })(i);
}
for (var j = 0; j < 3; j++) {
  funcs[j]();                
}
My value: 0
My value: 1
My value: 2
于 2013-08-23T16:53:04.087 に答える