在forEach中使用 return false 或者 break无法跳出整个循环,并且使用break会直接报错

发布时间 2023-11-15 22:17:20作者: 龙陌

执行以下程序,输出结果为()

var arr = [2,1,3,5,9];

var count = 0;

arr.forEach((val1,val2)=>{

        count++;

        if(count % 3 == 0){

            return;

        }

        console.log(val1);

})

A
2 1

B
0 1

C
0 1 3 4

D
2 1 5 9

正确答案:D

arr.forEach()是循环遍历数组,它的参数是一个函数,每迭代一次数组,就执行函数一次,
也就是,虽然在函数内部存在return语句,但是当执行return时相当于退出一次迭代,当前数组会继续下一次迭代,
函数有两个参数,参数val1为数组的元素值,参数val2为数组元素对应的索引,因此正确答案为D选项。

var arr = [2,1,3,5,9];
var count = 0;

arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
        count++; //第一次循环count++为0
        if(count % 3 == 0){ //第一次循环count为1,不满足条件,不进入if条件里
            return;
        }
        console.log(val1);//第一次循环val1=2
})

arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
        count++; //第二次循环count++为1
        if(count % 3 == 0){ //第二次循环count为2,不满足条件,不进入if条件里
            return;
        }
        console.log(val1);//第二次循环val1=1
})


arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
        count++; //第三次循环count++为2
        if(count % 3 == 0){ //第三次循环count为3,满足条件,进入if条件里
            return;     //return跳出本次循环,不执行后续代码
        }
        console.log(val1);//第三次循环没执行到这
})


arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
        count++; //第四次循环count++为3
        if(count % 3 == 0){ //第四次循环count为4,不满足条件,不进入if条件里
            return;         
        }
        console.log(val1);//第四次循环val1=5
})


arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
        count++; //第五次循环count++为4
        if(count % 3 == 0){ //第五次循环count为5,不满足条件,不进入if条件里
            return;         
        }
        console.log(val1);//第五次循环val1=9
})

在forEach中使用 return false 或者 break无法跳出整个循环,并且使用break会直接报错

return false;//仍然会执行完循环,但不再执行循环后面的js代码 let arr = [2,31,3] arr.forEach((val, index) => { if(val===31) { return false } console.log('执行第' + index + '次数') }) 执行第0次数
执行第2次数
其中val =31 这一次的循环return false以后的代码不再执行

根据MDN的forEach方法注意点,除了抛出异常以外,没有办法跳出或中止forEach方法。如果需要中止或跳出循环,不应该是forEach

forEach:使用 return false 或者 break无法跳出整个循环,并且使用break会直接报错
for of: 与for(;;)类似,可以跳出循环
every:every的判断是在识别到不满足的条件时,立刻停止
filter、some:无法跳出循环,并且使用break会直接报错