曾经有一次面试,面试官问了forEach遇到报错能不能跳出循环,没背八股文的我直接说能,然后就没有然后了
forEach到底能不能跳出循环?
首先我们知道forEach接收的是一个函数
Array.forEach(
(current,index,arr)=>{}
)
再看看最原始的for循环
let i;
let arr=[1,2,3,4,5];
for(i=0;i<arr.length;i++){}
如果我们用for循环去封装一个forEach循环会是怎么样的
let copyForEach = function(fn){
let i;
for(i=0;i<this.length;i++){
fn(this[i],i,this)
}
}
Array.prototype.copyForEach=copyForEach;
let arr=[1,2,3,4,5];
arr.copyForEach((current,index,arr)=>{
console.log(current,index,arr);
});
上面可以看出,我们在操作forEach的时候只能操作回调函数,并不能操作到实际的for循环体
let i;
for(i=0;i<5;i++){
add(i)
console.log(i)
}
function add(i){
if(i==1){
return;
}
}
这个例子很明显看出,return并没有阻止循环