从内部函数中的父作用域访问数组元素

时间:2014-05-24 16:57:12

标签: javascript arrays scope closures

在下面的代码中,我尝试创建几个处理函数,这些函数必须调用存储在函数数组中的不同函数(' 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;)。我希望每个处理程序函数只调用相关数组索引指定的相关函数。我怎样才能做到这一点?

1 个答案:

答案 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]);
}