continue

continue

continue 문은 현재 또는 레이블이 지정된 루프의 현재 반복에서 문들의 실행을 종료하고, 루프의 다음 반복으로 실행을 계속합니다.

출처: continue

본문

continue 문은 현재 또는 레이블이 지정된 루프의 현재 반복에서 문들의 실행을 종료하고, 루프의 다음 반복으로 실행을 계속합니다.

구문 (Syntax)

continue;
continue label;
  • label: 문의 레이블과 연관된 식별자입니다.

설명 (Description)

break 문과 대조적으로, continue는 루프의 실행을 완전히 종료하지 않고 대신 다음을 수행합니다.

  • while 또는 do...while 루프에서는 조건으로 다시 점프합니다.
  • for 루프에서는 갱신 표현식(update expression)으로 점프합니다.
  • for...in, for...of, for await...of 루프에서는 다음 반복으로 점프합니다.

continue 문은 선택적 레이블을 포함할 수 있어, 가장 안쪽 루프 대신 레이블이 지정된 루프 문의 다음 반복으로 프로그램이 점프할 수 있습니다. 이 경우 continue 문은 이 레이블이 지정된 문 안에 중첩되어 있어야 합니다.

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

예제: while과 함께 continue 사용하기

다음 예제는 i의 값이 3일 때 실행되는 continue 문을 가진 while 루프를 보여줍니다. 따라서 n은 1, 3, 7, 12 값을 갖게 됩니다.

let i = 0;
let n = 0;

while (i < 5) {
  i++;

  if (i === 3) {
    continue;
  }

  n += i;
}

예제: 레이블과 함께 continue 사용하기

다음 예제에서 checkIAndJ로 레이블이 지정된 문은 checkJ로 레이블이 지정된 문을 포함합니다. continue를 만나면 프로그램은 checkJ 문의 맨 위에서 계속합니다. continue를 만날 때마다 checkJ는 조건이 false를 반환할 때까지 다시 반복합니다. false가 반환되면 checkIAndJ 문의 나머지가 완료됩니다.

continuecheckIAndJ 레이블이 있었다면, 프로그램은 checkIAndJ 문의 맨 위에서 계속했을 것입니다.

let i = 0;
let j = 8;

checkIAndJ: while (i < 4) {
  console.log(`i: ${i}`);
  i += 1;

  checkJ: while (j > 4) {
    console.log(`j: ${j}`);
    j -= 1;

    if (j % 2 === 0) continue;
    console.log(`${j} is odd.`);
  }
  console.log(`i = ${i}`);
  console.log(`j = ${j}`);
}

예제: 구문적으로 맞지 않는 continue 문

continue는 함수 경계를 가로질러 루프 내에서 사용할 수 없습니다.

for (let i = 0; i < 10; i++) {
  (() => {
    continue; // SyntaxError: Illegal continue statement: no surrounding iteration statement
  })();
}

레이블을 참조할 때, 레이블이 지정된 문이 continue 문을 포함해야 합니다.

label: for (let i = 0; i < 10; i++) {
  console.log(i);
}

for (let i = 0; i < 10; i++) {
  continue label; // SyntaxError: Undefined label 'label'
}

레이블이 지정된 문은 루프여야 합니다.

label: {
  for (let i = 0; i < 10; i++) {
    continue label; // SyntaxError: Illegal continue statement: 'label' does not denote an iteration statement
  }
}

더 알아보기