zoukankan      html  css  js  c++  java
  • 终止循环

    今天在写一个简单的循环时候,需求是判断有指定的值就返回当前值,并跳出循环,我首先想到是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
  • 相关阅读:
    Hashset 常用的方法
    List新增的方法
    关于集合
    转载关于sql 注入
    可变参数和preparestatement 结合使用
    数据库连接 中的测试事例,包括工具类,配置文件,查询,增加,以及查询后返回对象
    在静态方法中不能调用非静态变量,但getclass()可以换个形式来调用
    用一个对象中读出信息进行出入的代码片段
    新建maven项目更改 web版本
    elasticsearch 局部更新
  • 原文地址:https://www.cnblogs.com/xiaolanschool/p/12767152.html
Copyright © 2011-2022 走看看