forEach到底能不能跳出循环

107 阅读1分钟

曾经有一次面试,面试官问了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);
});

6F96BE3C-AFD4-48b2-A354-ACE8DC33A2CE.png

上面可以看出,我们在操作forEach的时候只能操作回调函数,并不能操作到实际的for循环体

    let i;
    for(i=0;i<5;i++){
        add(i)
        console.log(i)
    }
    function add(i){
           if(i==1){
            return;
           }
    }

这个例子很明显看出,return并没有阻止循环