label

현재 번역은 완벽하지 않습니다. 한국어로 문서 번역에 동참해주세요.

레이블 구문breakcontinue 구문과 함께 사용할 수 있다. 원하는 식별자로 구문 앞에 레이블을 추가할 수 있다.

레이블을 붙인 반복문이나 블록가 자주 사용되는 것은 아니다. 반복문으로 점프하는 대신에 함수를 호출할 수도 있다.

문법

label :
   statement
label
자바스크립트에서 사용할 수 있는 식별자면 모두 가능하다.
statement
구문. break는 모든 레이블 구문에서 사용될 수 있으며, continue는 반복 레이블 구문에서만 사용할 수 있다.

설명

반복문에 레이블을 붙이고, break나 continue 구문을 사용해 반복문의 어느 위치에서 작업을 멈추고 어느 위치에서 다시 수행할지를 알려줄 수 있다.

자바스크립트에는 goto 구문이 없다는 것에 주의. break나 continue에서만 레이블을 사용할 수 있다.

strict mode  코드에서 "let"을 레이블 이름으로 사용할 수 없다. SyntaxError를 발생시킨다. (let은 허용되지 않는 식별자이다.)

예제

for문에서 레이블 continue 사용하기

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"

레이블 continue문 사용하기

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++;
}

for문에 레이블 break문 사용하기

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

레이블 break문 사용하기

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 사용하기

간단한 블록에도 레이블을 사용할 수 있지만, 반복문 아닌 레이블에는 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  에서는 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

명세

Specification Status Comment
ECMAScript 3rd Edition (ECMA-262) Standard Initial definition. Implemented in JavaScript 1.2
ECMAScript 5.1 (ECMA-262)
The definition of 'Labelled statement' in that specification.
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Labelled statement' in that specification.
Standard  
ECMAScript 2017 Draft (ECMA-262)
The definition of 'Labelled statement' in that specification.
Draft  

브라우저 호환성

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

더 알아보기

문서 태그 및 공헌자

 이 페이지의 공헌자: wafersroom
 최종 변경: wafersroom,