This linkには、JavaScriptのクロージャに関する例があります。例5ではこの例のどの部分がクロージャですか?
、我々はこのコードを持っている:問題の説明では
function buildList(list) {
var result = [];
for (var i = 0; i < list.length; i++) {
var item = 'item' + i;
result.push(function() {console.log(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]();
}
}
testList(); //logs "item 2 is undefined" 3 times
を、それが 『未定義ITEM2「あなたが例を実行すると、ことに注意してください』記載されている3回警告さです!前の例と同様に、buildListのローカル変数にはクロージャが1つしかありません。
上記のコードのどの部分がクロージャですか?私は、どの部分が閉じられているのか分からないので、例と説明で捨てられているので、コードがなぜ定義されていないのか理解できません。
クロージャは、スコープの一部である 'function(){console.log(item + '' + list [i])}'関数と 'item'、' list'および 'i'変数です。その関数のスコープの一部ではなく、その関数が含まれています。重要なのは、すべての関数において、 'item'、' list'、および 'i'は常に同じ変数のセットです。 – Ryan