map 与forEach本身为什么不能终止循环? 2021-01-14

map 与forEach本身为什么不能终止循环?

相信有的面试官会问map是否能终止循环?我觉得这么问不严谨,应该说map本身是否可以终止循环。这个本身指的是通过条件使用return 或者 break跳出循环。

当然这么问是考验你对map和foeEach的理解程度。

map和forEach其实可以跳出循环,只不过不是通过自己本身来实现的,而是抛出 new throw error() 通过try catch去捕获这个错误才可以终止循环。例:

let list=[1,2,3,4,5,6];
try{
  list.map(item=>{
     if(item===3){
          throw new Error()
         }
     console.log(item)
  })
} catch {}
// 1 2

只会打印出:1 2

但这是通过try catch 加上throw new Error()实现的效果

但是为什么map和forEach自己本身是无法通过return false 或者break跳出呢 附上一个MDN上面的图片  图片的地址: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map

上面写着会判断callback是否为一个函数当callback不是一个函数的时候会抛出一个错误。

我们都知道map会接收两个参数callback和thisArg(这个thisArg本人也不知道有什么作用,欢迎大牛指点一下),而这个callback就是传入的函数, 例:

let a=[1,2,3,4,5,6]
a.map(()=>{})  //这个()=>{}   就是一个函数(箭头函数)

因为这个参数一定是一个函数,所以内部不会捕获错误,就算在callback函数中return false 或者break也不会被map内部捕获到,所以会跳出某一次循环继续下一次循环而不是终止。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值