在forEach中使用return只会跳出本次循环
let a = 1, b = 1
let c = 2, d = 2
let e = 3, f = 3
let list = [1, 2, 3, 4, 5, 6, 7]
function foo() {
if (a === b) {
list.forEach(item => {
if (item === 3) {
console.log(333333333)
return
}
})
//forEach中的return出来到这里继续执行
if (e === f) {
console.log('e === f')
return
}
}
}
输出 333333333 和 e === f
解决方法一,用for代替forEach
解决方法二,用flag判断,在需要return的地方修改flag的值,在受影响的地方用flag决定是否执行
function foo() {
let flag = true
if (a === b) {
list.forEach(item => {
if(item === 3){
console.log(333333333)
flag = false
return
}
})
if (e === f && flag) {
console.log('e === f')
return
}
}
}
只输出 333333333
forEach本身是函数,对数组的每个元素执行一次给定的函数。数组有几个元素,就执行几次函数。所以forEach中的return 只会跳出本次循环函数,而for循环则是跳出全部循环
function foo(){
list.forEach(item => {
if(item === 3){
console.log(333333333)
flag = false
return
}
//新增
console.log(111111)//这里会输出6次,List长度是7,除掉item为3的那次。
})
console.log('循环外,函数内')//执行
}
function foo(){
for (let i = 0; i < list.length; i++) {
if (list[i] === 3) {
console.log(333333333)
return
}
console.log(0) //只会输出2次,是list[i]为1,2的两次
}
console.log('循环外,函数内')//不执行
}