终止循环
今天在写一个简单的循环时候,需求是判断有指定的值就返回当前值,并跳出循环,我首先想到是forEach,再在里面使用if判断,得到指定的值就使用break跳出循环,然并... 嗖嗖嗖的去找度娘 ** foreach()不能使用break和continue以及await关键字**
跳出循环方法(break,continue,return)
break语句
- break语句会使最内层的循环终止或者退出switch语句。
- break出现在循环体中,就跳出本层循环体
- break出现switch语句体中,就跳出该switch语句体
continue语句
- continue语句跳过本次循环,立即进行下一次循环。
- continue结束本次循环,仅仅是本次循环结束,但未终止整个循环
- 在while和do-while循环体中,continue语句使流程跳到控制条件的部分
- 在for循环中,遇到continue就会跳过循环体余下的语句,继续对for语句中表达式判断
return语句
- return语句用于指定函数返回值,只能用于函数体内。
- return从当前方法退出,返回到该调用的方法的语句处
forEach跳出循环
- 使用break, 报错
Uncaught SyntaxError: Illegal break statement
[1,2,3].forEach(item => {
if(item === 2) {
break
}
console.log(item)
})
- 使用return, 只是终止本次循环,而不是终止for循环,打印出来是
1 3
[1,2,3].forEach(item => {
if(item === 2) {
return false
}
console.log(item)
})
解决方式
因为forEach无法通过正常流程终止,所以可以通过抛出异常方式实现终止
try{
[1,2,3].forEach(item => {
if(item === 2) {
throw new Error('error')
}
console.log(item)
})
} catch(e) {
if(e.message !== 'error') throw e
}
// 打印出来就只有1
- forEach只支持同步代码,无法在内部处理异步
function test () {
const arr = [11, 2, 3]
arr.forEach(async item => {
const res = await fetch(item)
console.log(res)
})
}
function fetch (x) {
return new Promise(resolve => {
setTimeout(() => {
resolve(x)
}, 500 * x)
})
}
test()
// 期望结果11 2 3,得到打印顺序 2 3 11