JS中的中断\跳出循环

471 阅读1分钟
前言
  • 常见的需要退出循环的方法有for、forEach、for in、for of、some、every等。
  • 常见对函数进行中断或跳出循环的操作有break return continue。
场景
  • for、for in、for of:使用breakreturncontinue
    • return:跳出当前正在执行函数。会直接跳出多层循环,返回调用的方法外部。return后面的内容是不会继续执行的
    //可以设置flag来退出循环
    function fn() {
      for(let i = 0; i < 5; i++) {
        for(let j = 0; j < 6; j++) {
          if(i === 2) {
              return false
          }
          console.log(i);
        }
      }
      console.log('猪八戒'); //上面return false直接退出函数了,循环也没执行完
    }
    fn();  //0(6个),1(6个),外层循环执行了两次,
    
    • break:结束当前循环,会继续执行该循环之后的代码,可以指定label退出特定的循环(用来退出最外层循环)。
    function fn() {
      for(let i = 0; i < 5; i++) {
        if(i === 2) {
           break
        }
        console.log(i);
      }
      console.log('猪八戒');
    }
    fn();  //0, 1,猪八戒
    
    
    function fn() {
        label: for (let i = 0; i < 5; i++) {
          for (let j = 0; j < 6; j++) {
            if (i === 2) {
              break label;  //退出最外层循环
            }
            console.log(i);
          }
        }
        console.log("猪八戒");
    }
    fn(); //0(6), 1(6), 猪八戒
    
  • continue:结束本次的循环,直接进行下一次的循环
function fn() {
   for(let i = 0; i < 5; i++) {
     if(i === 2) {
         continue
     }
     console.log(i);
   }
   console.log('猪八戒');
}
fn()  //0, 1, 3, 4, 猪八戒
  • forEach:可以使用throw+try catch。其他像map、filter也能通过此法直接退出
let arr = [1, 2, 3, 4, 5];
try {
  arr.forEach(item => {
    if (item === 3) {
      throw new Error("err");
    }
    console.log(item);
  });
} catch(e) {
  console.log(e.message); //err 
}
//1, 2. err
  • every:return false跳出循环(需要写return true)
let arr = [1, 2, 3, 4, 5];
arr.every(item => {
  if(item === 3) {
    return false
  } else {
    console.log(item)
    return true
  }
}) //1, 2
  • some:return true跳出循环
let arr = [1, 2, 3, 45];
arr.some(item => {
  if(item === 2) {
    return true
  }
  console.log(item)
})   //1, 2