break

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

试一试

语法

js
break;
break label;
label 可选

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

描述

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

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

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

示例

while 循环中的 break

以下函数包含一个 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 = "sushi";

switch (food) {
  case "sushi":
    console.log("Sushi is originally from Japan.");
    break;
  case "pizza":
    console.log("Pizza is originally from Italy.");
    break;
  default:
    console.log("I have never heard of that dish.");
    break;
}

带标签的块中的 break

以下代码使用带有标签的块的 break 语句。通过使用 break outerBlock,控制权将转移到标记为 outerBlock 的块语句的末尾。

js
outerBlock: {
  innerBlock: {
    console.log("1");
    break outerBlock; // breaks out of both innerBlock and outerBlock
    console.log(":-("); // skipped
  }
  console.log("2"); // skipped
}

非语法 break 语句

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

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

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

以下代码示例也生成了语法错误,这些代码示例在嵌套在循环中的函数内使用 break 语句,或者 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'
  })();
}

规范

规范
ECMAScript 语言规范
# sec-break-statement

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅