最近在刷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每次都会新创建一个函数。
- 函数有单独的作用域和上下文(堆栈模型),所以会有额外的开销,耗时更久。
- 为什么for比forEach更快?
- 但是在日常开发中,不仅仅要考虑性能,还要考虑代码的
可读性
,forEach的可读性会更好,且日常中也极少会一次性处理100万条数据。