break

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

break 语句终止当前循环或 switch 语句,并将程序控制权转移到终止语句后的语句。当在带有标签的语句内部使用时,它还可以用于跳过该标记语句

尝试一下

语法

js
break;
break label;
label 可选

与要中断的语句的标签关联的标识符。如果 break 语句未嵌套在循环或 switch 中,则需要标签标识符。

描述

执行到 break; 时,程序会跳出最内层的 switch循环语句,并继续执行其后的下一条语句。

执行到 break label; 时,程序会跳出标记为 label 的语句,并继续执行其后的下一条语句。break 语句需要嵌套在引用的标签内。标记语句可以是任何语句(通常是语句),它不一定是另一个循环语句。

即使函数或类进一步嵌套在循环中,break 语句(无论是否带有标签)也不能在脚本、模块、函数体或静态初始化块的顶层使用。

示例

中断 while 循环

以下函数有一个 break 语句,当 i 等于 3 时终止 while 循环,然后返回值 3 * x

js
function testBreak(x) {
  let i = 0;

  while (i < 6) {
    if (i === 3) {
      break;
    }
    i += 1;
  }

  return i * x;
}

switch 语句中的 break

以下代码有一个 break 语句,当匹配到一个 case 并执行完相应的代码后,会终止 switch 语句。

js
const food = "寿司";

switch (food) {
  case "寿司":
    console.log("寿司原产于日本。");
    break;
  case "披萨":
    console.log("披萨原产于意大利。");
    break;
  default:
    console.log("我从未听说过这道菜。");
    break;
}

带标签的 break 语句

以下代码展示了如何使用带标签的 break 语句。通过使用 break outerBlock 语句,可以跳出标记为 outerBlock 的嵌套循环或块语句。

js
outerBlock: {
  innerBlock: {
    console.log("1");
    break outerBlock; // 同时跳出 innerBlock 和 outerBlock
    console.log(":-("); // 跳过这一行
  }
  console.log("2"); // 跳过这一行
}

非法 break 语句

一个 break 语句必须嵌套在它引用的任何标签内部。以下代码也使用了带 break 语句的标签,但是会产生语法错误,因为其 break 语句引用了 block2,但它并未嵌套在 block2 内。

js
block1: {
  console.log("1");
  break block2; // SyntaxError: label not found
}

block2: {
  console.log("2");
}

以下代码示例中,在嵌套在循环或带标签块中的函数内使用 break 语句也会产生语法错误,而 break 语句旨在跳出这些循环或带标签块。

js
function testBreak(x) {
  let i = 0;

  while (i < 6) {
    if (i === 3) {
      (() => {
        break;
      })();
    }
    i += 1;
  }

  return i * x;
}

testBreak(1); // SyntaxError: Illegal break statement
js
block1: {
  console.log("1");
  (() => {
    break block1; // SyntaxError: Undefined label 'block1'
  })();
}

规范

Specification
ECMAScript Language Specification
# sec-break-statement

浏览器兼容性

BCD tables only load in the browser

参见