-1

我写了一个 forEach 实现来理解这个响应

function myForeach(sourch, func) {
    for (var i = 0, len = sourch.length; i < len; i++) {
        func(sourch[i], i, arr);
    }
}

和 forEach 一样,它比简单的 for 循环慢:

for (var i = 0, len = arr.length; i < len; i++) {
    (function(item) {
        action(item);
    })(arr[i], i, arr); //exactly what foreach dose!
}

在这里,两种方式都有function setup & teardown。为什么它这么快

在此处输入图像描述

4

2 回答 2

2

我认为这在很大程度上与您是一个空操作这一事实有关,action()它在某些情况下会被运行时优化,但在其他情况下则不会。

如果您更改您的操作以实际执行某项操作(例如,将数组值添加到sum变量中),则差异会小很多。

以下是我在 Chrome 上更新的基准测试结果:

结果

于 2018-07-19T01:31:22.260 回答
0

当在循环中声明匿名函数时,即'function() { // doStuff}',解释器必须在每次循环迭代时在运行时定义一个新函数,从而为解释器带来大量开销。

于 2018-07-19T01:28:04.483 回答