显式数组属性与JavaScript中的变量

时间:2018-08-26 12:46:05

标签: javascript arrays

试图重构一个简单的函数:

// arr - array of objects with functions
function eventNotify(arr, event) {
    for (var i = 0; i < arr.length; i++) {
        var a = arr[i];
        if (typeof a[event] === 'function') {
            a[event]();
        }
    }
}

进入这个:

function eventNotify(arr, event) {
    for (var i = 0; i < arr.length; i++) {
        var a = arr[i][event];
        if (typeof a === 'function') {
            a();
        }
    }
}

我一直想了解这种变化如何破坏我的所有测试。

第二个实现与第一个实现在功能上有何不同?

我什至试图拆分索引的使用,以为可能将其视为3D数组:

var a = arr[i];
a = a[event];

但是,这没有什么区别。

请有人指出我到底在改变算法的逻辑!我现在正在为此而绞尽脑汁。


我正在Node.js 10.9下对其进行测试

1 个答案:

答案 0 :(得分:0)

感谢@Pointy

我的错误是无法看到语法a[event]()掩盖了它在设置为对象this的{​​{1}}上下文中传递的事实,而简单的a却没有,因此结果不一致。