私はクロージャに懸命に取り組んでおり、ループ内で新しい関数がイテレータの最後の値を使用してクロージャを参照することを知っています
したがって、次の関数の結果は"item3 undefined"の 3 倍になります。
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
var item = 'item' + list[i];
result.push( function() {alert(item + ' ' + list[i])} );
}
return result;
}
function testList() {
var fnlist = buildList([1,2,3]);
// using j only to help prevent confusion - could use i
for (var j = 0; j < fnlist.length; j++) {
fnlist[j]();
}
}
そして、匿名関数がスコープを誘導できることを知っているので、最初の関数を次のように編集します。
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
(function(){
var item = 'item' + list[i];
result.push( function() {alert(item + ' ' + list[i])} );
})();
}
return result;
}
しかし、結果は「item1 undefined」、「item2 undefined」、「item3 undefined」、
私の質問は、なぜスコープを使用した後も結果がまだ定義されていないのですか?