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内部捕获到,所以会跳出某一次循环继续下一次循环而不是终止。