我已经编写了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?
答案 0 :(得分:2)
我认为这与以下事实有关:action()
是无操作的,在某些情况下(但在其他情况下不会),运行时会对其进行优化。
如果您将操作更改为实际执行某项操作(例如,将数组值添加到sum
变量中),则差异要小得多。
这是我的updated benchmark结果,也在Chrome上显示:
答案 1 :(得分:0)
在循环中声明匿名函数(即'function(){// doStuff}“时,解释器必须在运行时每次循环迭代时定义一个新函数,从而为解释器增加了很多开销。