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

标签 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');
        ...
    };
}

上面的代码导致处理函数调用函数数组的最后一个数组元素('buttonHandlers')。我希望每个处理函数只调用相关数组索引指定的关联函数。我怎样才能做到这一点?

最佳答案

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

关于javascript - 从内部函数中的父作用域访问数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23847537/

相关文章:

javascript - sort(), sort(function(a,b){return a-b;}); 之间的区别和排序(函数(a,b){...})

javascript - 为什么javascript向后兼容出错?

javascript - 变量全局范围但为什么函数无法访问?

javascript - angularjs获取元素当前位置的方法

javascript - 我们如何在多个选项卡(页面)中使用相同的状态?

arrays - 在MongoDB文档中增加匹配条件的数组元素?

python - 从嵌套字典创建二维数组

java - 为什么我的数组没有填充对象/显示?

PHP:在 foreach 循环范围之外持续存在的数组修改

javascript - 匿名函数失去作用域