我正在考虑改进我们的一些 for each 循环,并创建了一个测试基准来比较我们使用它们的不同方式。测试可以found here .
我惊讶地发现这段代码:
function add(val) {
sum += val;
}
values.forEach(add);
比这个表现更好。
values.forEach(function(val) {
sum += val;
});
这些不完全一样吗?是什么让第一个代码片段比第二个更快?
最佳答案
你的测试有问题。您的测试是:
values.forEach(add);
和
values.forEach(function(val) {
sum += val;
});
在第二个测试中,您要为函数的创建和 forEach
的执行计时。在第一个测试中,您没有为函数的创建计时;这是在测试的设置阶段完成的,不定时。
Davin Tryon已创建 a test that creates the functions in both cases :
function add(val) {
sum += val;
}
values.forEach(add);
对比
values.forEach(function(val) {
sum += val;
});
...其中性能差异在某些引擎上消失,而在某些引擎上则相反(声明速度较慢)。 (后者可能是引擎在测试期间发现它可以内联函数,或者至少跳过一些它不能通过声明跳过的步骤。)
关于Javascript foreach 循环性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28085021/