JavaScript,了解为什么`foreach`实现比`for`慢

时间:2018-07-19 01:10:31

标签: javascript performance for-loop foreach for-of-loop

我已经编写了forEach实现以了解此Response

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。 为什么使用so faster

enter image description here

2 个答案:

答案 0 :(得分:2)

我认为这与以下事实有关:action()是无操作的,在某些情况下(但在其他情况下不会),运行时会对其进行优化。

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

这是我的updated benchmark结果,也在Chrome上显示:

results

答案 1 :(得分:0)

在循环中声明匿名函数(即'function(){// doStuff}“时,解释器必须在运行时每次循环迭代时定义一个新函数,从而为解释器增加了很多开销。

相关问题