之所以写这篇文章是在实际使用中有一些困惑;那么在for循环中使用什么来跳出循环呢,在forEach中又是使用什么来结束循环呢?
先看下代码
function test(arr){
for (let i = 0; i < arr.length; i++) {
console.log('1',arr[i])
if (i === 2){
break
}
}
arr.forEach((item,index) => {
console.log('2',item)
if (index === 2){
return
}
})
}
test([1,2,3,1])
输出如下
1 1
1 2
1 3
2 1
2 2
2 3
2 1
由此可见,在for循环中使用 break是可以跳出循环的,再来看看使用return的情况
function test(arr){
for (let i = 0; i < arr.length; i++) {
console.log('1',arr[i])
if (i === 2){
return
}
}
arr.forEach((item,index) => {
console.log('2',item)
if (index === 2){
return
}
})
}
test([1,2,3,1])
输出如下
1 1
1 2
1 3
可见这是直接跳出了整个test函数,也相当于跳出了循环,但下面的forEach不执行了,也就是说在for循环中使用return会切断当前函数的执行线程
至于forEach的话,在第一种情况中已经中已经能够体现出来了,可见在forEach中使用return既不会跳出循环,也不会杀掉当前函数的执行线程,对于这种情况可以使用arr.some()或者arr.every()替代
some()当内部 return true 时跳出整个循环:
every()当内部 return false 时跳出整个循环(但是该方法false和true两种状态都要写全,保证两个分支均能正常工作或输出),如下
arr.every(function(val,i){
if(val==3){
return false; //注意这里是return false
}else{
console.log(val);
return true; //注意这里的 return true 必须加上,不然会异常(打印不出2)
}
})