在下面的代码中,我尝试创建几个处理函数,这些函数必须调用存储在函数数组中的不同函数(' buttonHandlers')。该数组是外部范围的一部分:
buttonJson = {};
for (i = 0; i < buttonNames.length; i++) {
customHandler = buttonHandlers[i];
buttonJson[buttonNames[i]] = function() {
customHandler.apply();
$('#msg-dialog-confirm').dialog("close");
$('body').remove('#msg-dialog-confirm');
...
};
}
上面的代码导致处理函数调用函数数组的最后一个数组元素(&#39; buttonHandlers&#39;)。我希望每个处理程序函数只调用相关数组索引指定的相关函数。我怎样才能做到这一点?
答案 0 :(得分:2)
customHandler
是全局的,你在每次迭代时都会覆盖它,你应该创建一个新的范围来锁定值
buttonJson = {};
for (i = 0; i < buttonNames.length; i++) {
(function(button) {
buttonJson[button] = function() {
button.apply();
$('#msg-dialog-confirm').dialog("close");
$('body').remove('#msg-dialog-confirm');
...
};
})(buttonHandlers[i]);
}