为什么普通for的性能远高于forEach的性能
forEach vs for loop网址:https://jsperf.com/testing-foreach-vs-for-loop
(有如下几种可能)
1.
- for 循环没有任何额外的函数调用栈和上下文;
- forEach函数签名实际上是
array.forEach(function(currentValue, index, arr), thisValue)
它不是普通的 for 循环的语法糖,还有诸多参数和上下文需要在执行的时候考虑进来,这里可能拖慢性能;
2.forEach 里操作了toObject 以及判断是否终止循环条件比for loop 复杂一点。
3.代码如下
let arrs = new Array(100000);
console.time('for');
for (let i = 0; i < arrs.length; i++) {
};
console.timeEnd('for');
console.time('forEach');
arrs.forEach((arr) => {
});
console.timeEnd('forEach');
结论:
- 在10万这个级别下, forEach 的性能是 for的十倍
- 在100万这个量级下, forEach 的性能是和for的一致
- 在1000万级以上的量级上 , forEach 的性能远远低于for的性能