break

break

break 문은 현재 루프 또는 switch 문을 종료하고, 종료된 문 다음의 문으로 프로그램 제어를 전달합니다. 레이블이 지정된 문 내에서 사용될 때 레이블이 지정된 문을 지나 점프하는 데에도 사용할 수 있습니다.

출처: break

본문

break 문은 현재 루프 또는 switch 문을 종료하고, 종료된 문 다음의 문으로 프로그램 제어를 전달합니다. 레이블이 지정된 문 내에서 사용될 때 레이블이 지정된 문을 지나 점프하는 데에도 사용할 수 있습니다.

구문 (Syntax)

break;
break label;
  • label: break할 문의 레이블과 연관된 식별자입니다. break 문이 루프나 switch 안에 중첩되어 있지 않으면 label 식별자가 필요합니다.

설명 (Description)

break;를 만나면 프로그램은 가장 안쪽의 switch 또는 루프 문을 빠져나가 그 다음 문을 계속 실행합니다.

break label;을 만나면 프로그램은 label로 지정된 문을 빠져나가 그 다음 문을 계속 실행합니다. break 문은 참조하는 레이블 안에 중첩되어 있어야 합니다. 레이블이 지정된 문은 어떤 문이든 될 수 있고(보통 블록 문), 반드시 다른 루프 문일 필요는 없습니다.

break 문은 레이블이 있든 없든, 함수나 클래스가 루프에 더 포함되어 있더라도 스크립트, 모듈, 함수 본문, 정적 초기화 블록의 최상위 수준에서는 사용할 수 없습니다.

예제: while 루프에서의 break

다음 함수는 i가 3일 때 while 루프를 종료하는 break 문을 가지며, 그런 다음 3 * x 값을 반환합니다.

function testBreak(x) {
  let i = 0;

  while (i < 6) {
    if (i === 3) {
      break;
    }
    i += 1;
  }

  return i * x;
}

예제: switch 문에서의 break

다음 코드는 case가 일치하고 해당 코드가 실행되었을 때 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 문을 사용합니다. break outerBlock을 사용하면 outerBlock으로 표시된 블록 문의 끝으로 제어가 전달됩니다.

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 안에 중첩되어 있지 않으므로 구문 오류를 발생시킵니다.

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

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

또한 break 문이 빠져나가려는 루프나 레이블이 지정된 블록 안에 중첩된 함수 내에서 break 문을 사용하는 다음 코드 예제에서도 구문 오류가 발생합니다.

function testBreak(x) {
  let i = 0;

  while (i < 6) {
    if (i === 3) {
      (() => {
        break;
      })();
    }
    i += 1;
  }

  return i * x;
}

testBreak(1); // SyntaxError: Illegal break statement
block1: {
  console.log("1");
  (() => {
    break block1; // SyntaxError: Undefined label 'block1'
  })();
}

더 알아보기