通过引用传递给闭包的变量。这段代码:
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);
}
是否可以避免包装函数以按值传递?
更新相关问题和答案: