试一试
let i = 0;
while (i < 6) {
if (i === 3) {
break;
}
i += 1;
}
console.log(i);
// Expected output: 3
语法
js
break;
break label;
描述
当遇到 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 语句旨在跳出这些循环或标签块。
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® 2026 语言规范 # sec-break-statement |
浏览器兼容性
加载中…