终止循环

今天在写一个简单的循环时候,需求是判断有指定的值就返回当前值,并跳出循环,我首先想到是forEach,再在里面使用if判断,得到指定的值就使用break跳出循环,然并... 嗖嗖嗖的去找度娘 ** foreach()不能使用break和continue以及await关键字**

跳出循环方法(break,continue,return)

break语句

  • break语句会使最内层的循环终止或者退出switch语句。
  1. break出现在循环体中,就跳出本层循环体
  2. break出现switch语句体中,就跳出该switch语句体

continue语句

  • continue语句跳过本次循环,立即进行下一次循环。
  1. continue结束本次循环,仅仅是本次循环结束,但未终止整个循环
  2. 在while和do-while循环体中,continue语句使流程跳到控制条件的部分
  3. 在for循环中,遇到continue就会跳过循环体余下的语句,继续对for语句中表达式判断

return语句

  • return语句用于指定函数返回值,只能用于函数体内。
  1. return从当前方法退出,返回到该调用的方法的语句处

forEach跳出循环

  1. 使用break, 报错Uncaught SyntaxError: Illegal break statement
 [1,2,3].forEach(item => {
    if(item === 2) {
       break
    }
    console.log(item)
 })
  1. 使用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
原文地址:https://www.cnblogs.com/xiaolanschool/p/12767152.html