クロージャーについて読んでいますが、これら 2 つのコード スニペットの違いを理解するのに苦労しました。
var myElements = [ /* DOM Collection */ ];
for (var i = 0; i < 100; ++i) {
myElements[i].onclick = function() {
alert( 'You clicked on: ' + i );
};
}
上記のコードはi
、onclick ごとに 99 としてのみ表示されます。
function getHandler(n) {
return function() {
alert( 'You clicked on: ' + n );
};
}
for (var i = 0; i < 100; ++i) {
myElements[i].onclick = getHandler(i);
}
上記のコードは、要素のクリック イベントごとに 'i' の正しい値を表示します。
最初のものに の正しい値が表示されない理由がわかりませんi
。そうでない場合、2 番目の値が正しい値を表示するのはなぜですか??