遍历数组,for和forEach哪个快?(JS底层原理)

39 阅读1分钟
  const arr = []
  for (let i = 0; i < 100 * 10000; i++) {
    arr.push(i)
  }
  const length = arr.length
  console.time('for')
  let n1 = 0
  for (let i = 0; i < length; i++) {
    n1++
  }
  console.timeEnd('for')

  console.time('forEach')
  let n2 = 0
  arr.forEach(() => n2++)
  console.timeEnd('forEach')

image.png

答案

  • for 更快
  • forEach 每次都要创建一个函数来调用,而for不会创建函数
  • 函数需要独立的作用域,会有额外的开销

划重点

  • 越“低级”的代码,性能往往越好
  • 日常开发别只考虑性能,forEach代码可读性更好(在时间复杂度一致的情况下)

回顾:循环vs递归

  • 循环每次不会创建函数
  • 递归每次会创建函数,开销更大一些