for与forEach的区别

对于它们的区别,我大概知道,但真让我说出个所以然来,我竟也说不出啥,也许,这就是为什么我成不了一个稍有本事的程序员的原因。感叹的话就到这里。进入正题。

1.写法不同(众所周知)

  var menuEx = ['a','b',...]
  var m = 'b'
  for (let = 0; i < menuEx.length; i++) {
      ......
    }


  this.menuEx.forEach(v => {
......
            })

2.中断循环不同

for循环中断循环(利用break语句或return语句)

forEach是通过throw   error()

3.关于扩展js原生的Array类

使用for循环时,打印每个value值,并不会打印出来扩展js原生的Array类(譬如下图),但使用forEach循环,就可以打印出来。

4.关于循环中包含有异步语句

for循环中包含异步语句时,初次遍历,进入到最里面的异步函数时,打印k,for循环已经循环完了,所以这个时候你打印的任何东西都是数组的最后一项。但是利用forEach循环,打印出来的就是数组中的每一项,不管异不异步。这个区别就是我这个需求中遇到的坑。以后记住了!!!!!!

有关于这个的原因,可移步至本人博客了解浏览器的执行机制

5.实现原理不同

for循环:通过下标,对循环中的代码反复执行,功能强大,可以通过index取得元素。在处理比较复杂的处理的时候较为方便。

foreach:从头到尾,对于集合中的对象遍历。适用于简单的遍历。foreach使用的时候,会锁定集合的对象,期间不能进行新增/修改

6.效率不同

for循环没有额外的函数调用栈和上下文,所以它的实现最为简单。forEach:对于forEach来说,它的函数签名中包含了参数和上下文,所以性能会低于 for 循环。

 foreach相对于for循环,代码减少了,但是foreach依赖IEnumerable(迭代器,es5新增特征)。在运行的时候效率低于for循环。当然了,在处理不确定循环次数的循环,或者循环次数需要计算的情况下。使用foreach比较方便。而且foreach的代码经过编译系统的代码优化后,和for循环的循环类似。

事件循环机制_如花菇凉的博客-CSDN博客_事件循环机制

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值