遍历一个数组,用for和forEach哪个更快

最近在刷leetcode,从而产生这个疑问,从算法时间复杂度上面来说,两者都是o(n),但是通过实际运行代码的情况来说,两者还是有区别的。

  • 代码测试
    创建一个长度为100万条的数组,然后分别用for和forEach遍历这个数组
const arr = [];
for (let i = 0; i < 10000 * 100; i++) {
    arr.push(i);
}
const length = arr.length;

console.time("for");
let n1 = 0;
for (let j = 0; j < length; j++) {
    n1++;
}
console.timeEnd("for"); // for: 2.452880859375 ms

console.time("forEach");
let n2 = 0;
arr.forEach(() => n2++);
console.timeEnd("forEach"); // forEach: 11.758056640625 ms
  • 得出结论
    从上面代码中可知for的时间要比forEach少
    • 为什么for比forEach更快?
      • for直接在当前函数中执行,forEach每次都会新创建一个函数。
      • 函数有单独的作用域和上下文(堆栈模型),所以会有额外的开销,耗时更久。
  • 但是在日常开发中,不仅仅要考虑性能,还要考虑代码的可读性,forEach的可读性会更好,且日常中也极少会一次性处理100万条数据。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容