面试题--为什么普通 `for` 循环的性能远远高于 `forEach` 的性能,请解释其中的原因。

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');

for: 2.263ms
forEach: 0.254ms

在10万这个级别下,forEach 的性能是 for 的十倍

for: 1.703857421875ms
forEach: 0.239013671875ms

在100万这个量级下,forEach 的性能是和 for 一致的。

for: 2.302001953125ms
forEach: 2.081787109375ms

在1000万级以上的量级上 , forEach 的性能远远低于for的性能。

for: 7.581787109375ms
forEach: 22.27978515625ms

那其实在 https://jsperf.com/ 里面测试,还是 for 的性能更好一些(10万次内)。

个人理解:

在 forEach 的语法上:

arr.forEach(callback(currentValue [, index [, array]])[, thisArg])

可以看到 forEach 是有回调的,它会按升序为数组中含有效值的每一项执行一次 callback,且除了抛出异常以外,也没有办法中止或者跳出 forEach 循环。那这样的话执行就会额外的调用栈和函数内的上下文。

而 for 循环则是底层写法,不会产生额外的消耗。

那在实际业务中没有很大的数组时,for 和 forEach 的性能差距其实很小,forEach 甚至会优于 for 的时间,且更加简洁,可读性也更高,一般也会优先使用 forEach 方法来进行数组的循环处理。

在兼容性上,肯定是 for 循环的兼容优于 forEach 的了。
在这里插入图片描述
在这里插入图片描述
公众号:Coder 杂谈,欢迎关注
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值