参照によってクロージャに渡される変数。このコード:
var figs = ['circle', 'square'];
for (var i in figs) {
var fig = figs[i];
document.getElementById(fig).addEventListener("click", function(e) {
console.log(fig);
}, false);
}
クリックして丸を付けても、常に最後の配列要素をログに記録します(square 、 fig変数の最後の値)。
fig変数の実際の値をバインドするために、関数呼び出しでラッピングを使用します (したがって、中間クロージャーはループ値を保持します)。
var figs = ['circle', 'square'];
for (var i in figs) {
var fig = figs[i];
document.getElementById(fig).addEventListener("click", (function(fig) {
return function(e) {
console.log(fig);
}
})(fig), false);
}
値渡しのためにラッピング関数を避けることは可能ですか?
UPDATE関連の質問と回答: