--- title: label slug: Web/JavaScript/Reference/Statements/label translation_of: Web/JavaScript/Reference/Statements/label browser-compat: javascript.statements.label ---
레이블 구문은 {{jsxref("Statements/break", "break")}}나 {{jsxref("Statements/continue", "continue")}} 구문과 함께 사용할 수 있다. 원하는 식별자로 구문 앞에 레이블을 추가할 수 있다.
레이블을 붙인 반복문이나 블록가 자주 사용되는 것은 아니다. 반복문으로 점프하는 대신에 함수를 호출할 수도 있다.
label : statement
label
statement
반복문에 레이블을 붙이고, break나 continue 구문을 사용해 반복문의 어느 위치에서 작업을 멈추고 어느 위치에서 다시 수행할지를 알려줄 수 있다.
자바스크립트에는 goto 구문이 없다는 것에 주의. break나 continue에서만 레이블을 사용할 수 있다.
strict mode 코드에서 "let"을 레이블 이름으로 사용할 수 없다. {{jsxref("SyntaxError")}}를 발생시킨다. (let은 허용되지 않는 식별자이다.)
var i, j; loop1: for (i = 0; i < 3; i++) { //첫번째 for문은 "loop1" 레이블을 붙였다. loop2: for (j = 0; j < 3; j++) { //두번째 for문은 "loop2" 레이블을 붙였다. if (i === 1 && j === 1) { continue loop1; } console.log('i = ' + i + ', j = ' + j); } } // 출력 결과: // "i = 0, j = 0" // "i = 0, j = 1" // "i = 0, j = 2" // "i = 1, j = 0" // "i = 2, j = 0" // "i = 2, j = 1" // "i = 2, j = 2" // 다음 두 경우를 어떻게 스킵하는지 주목 : "i = 1, j = 1", "i = 1, j = 2"
items, tests 배열을 보면 이 예제는 tests를 통과하는 items의 수를 세고 있다.
var itemsPassed = 0; var i, j; top: for (i = 0; i < items.length; i++) { for (j = 0; j < tests.length; j++) { if (!tests[j].pass(items[i])) { continue top; } } itemsPassed++; }
var i, j; loop1: for (i = 0; i < 3; i++) { //The first for statement is labeled "loop1" loop2: for (j = 0; j < 3; j++) { //The second for statement is labeled "loop2" if (i === 1 && j === 1) { break loop1; } console.log('i = ' + i + ', j = ' + j); } } // Output is: // "i = 0, j = 0" // "i = 0, j = 1" // "i = 0, j = 2" // "i = 1, j = 0" // Notice the difference with the previous continue example
items, tests 배열을 보면, 다음 예제는 items가 tests를 모두 통과하는지 판단한다.
var allPass = true; var i, j; top: for (i = 0; items.length; i++) for (j = 0; j < tests.length; i++) if (!tests[j].pass(items[i])) { allPass = false; break top; }
간단한 블록에도 레이블을 사용할 수 있지만, 반복문 아닌 레이블에는 break문만 사용할 수 있다.
foo: { console.log('face'); break foo; console.log('this will not be executed'); } console.log('swap'); // 로그는 이렇게 출력된다: // "face" // "swap
ECMAScript 2015에서, 레이블 붙인 함수 선언문은 web compatibility annex of the specification의 non-strict 모드에서 표준화되어 있다.
L: function F() {}
strict mode 에서는 {{jsxref("SyntaxError")}}를 발생시킨다.
'use strict'; L: function F() {} // SyntaxError: functions cannot be labelled
Generator functions는 strict code도 non-strict code에서도 레이블 붙일 수 없다.
L: function* F() {} // SyntaxError: generator functions cannot be labelled
{{Specifications}}
{{Compat}}