--- title: break slug: Web/JavaScript/Reference/Statements/break tags: - JavaScript - Language feature - Reference - Statement translation_of: Web/JavaScript/Reference/Statements/break ---
break 文は現在のループや {{jsxref("Statements/switch", "switch")}} 文や{{jsxref("Statements/label", "ラベル", "", 1)}}文を中断し、中断した文の次の文にプログラムの制御を移します。
break [label];
label {{optional_inline}}break 文は、オプションでラベルを指定して、ラベル付き文の外にプログラムを脱出させることができます。 break 文は参照されるラベルの内側にある必要があります。ラベルはあらゆる{{jsxref("Statements/block", "ブロック", "", 1)}}文に付けることができます。ループ文の前である必要はありません。
break 文は、その後にラベルがあるかどうかに関わらず、 break 文で脱出しようとする現在のループや switch やラベル付き文の中に含まれる関数の本体の中で使用することはできません。
次の関数には i が 3 の時に {{jsxref("Statements/while", "while")}} 文を中断する break 文があるので、3 * x の値を返します。
function testBreak(x) {
var i = 0;
while (i < 6) {
if (i == 3) {
break;
}
i += 1;
}
return i * x;
}
次のコードには、一致する case と対応するコードが実行された後で {{jsxref("Statements/switch", "switch")}} 文を終了するための break があります。
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 文は、それを参照するラベル付き文の内側になければなりません。 inner_block が outer_block の中にあることに注意してください。
outer_block: {
inner_block: {
console.log('1');
break outer_block; // inner_block および outer_block の両方から抜けます
console.log(':-('); // スキップされる
}
console.log('2'); // スキップされる
}
次のコードもラベル付きブロックで break 文を使っていますが、 break 文が block_1 の内側にあるにもかかわらず block_2 を参照しているので、 SyntaxError が発生します。 break は、参照先ラベルの内側になければなりません。
block_1: {
console.log('1');
break block_2; // SyntaxError: label not found
}
block_2: {
console.log('2');
}
以下のコード例でも SyntaxError が発生します。これは break をループの中にある関数や、 break 文で脱出しようとしているラベル付きブロックの中にある関数の中で使用しているためです。
function testBreak(x) {
var i = 0;
while (i < 6) {
if (i == 3) {
(function() {
break;
})();
}
i += 1;
}
return i * x;
}
testBreak(1); // SyntaxError: Illegal break statement
block_1: {
console.log('1');
( function() {
break block_1; // SyntaxError: Undefined label 'block_1'
})();
}
| 仕様書 |
|---|
| {{SpecName('ESDraft', '#sec-break-statement', 'Break statement')}} |
{{Compat("javascript.statements.break")}}