break, continue
break
, continue
의 용법은 다른 언어에서와 동일하다.
for (let i = 0; i < 5; i++) {
console.log(i);
if (i === 2) {
break;
}
}
// output :
// 0
// 1
// 2
for (let i = 0; i < 5; i++) {
if (i === 2) {
continue;
}
console.log(i);
}
// output :
// 0
// 1
// 3
// 4
break
는 현재 진행되는 반복문을 탈출하며,
continue
는 현재 iteration(반복)을 종료, 다음 iteration으로 넘어간다.
문제는 반복문이 중첩되었을 때, 안쪽 반복문에서 여러 반복문을 한 번에 탈출하고 싶거나, 바깥쪽 반복문에서 continue처리를 하고 싶을 때에 발생한다.
JavaScript에는 이를 위해 label(레이블) 구문이 존재한다.
Label
for (let i = 0; i < 3; i++) {
// loop1
for (let j = 0; j < 3; j++) {
// loop2
console.log(`loop1 : ${i}, loop2 : ${j}`);
}
}
// output :
// loop1 : 0, loop2 : 0
// loop1 : 0, loop2 : 1
// loop1 : 0, loop2 : 2
// loop1 : 1, loop2 : 0
// loop1 : 1, loop2 : 1
// loop1 : 1, loop2 : 2
// loop1 : 2, loop2 : 0
// loop1 : 2, loop2 : 1
// loop1 : 2, loop2 : 2
** 문자열 중간에 변수나 표현식 등을 삽입하려면 큰따옴표나 작은따옴표가 아닌 역 따옴표(backtick, 백틱)로 묶어야 합니다. (line 5)
반복문에 label을 붙이고, break
나 continue
뒤에 label명을 붙임으로써 어느 반복문을 제어할지를 결정해줄 수 있다.
위의 예를 보자.
안쪽 반복문(loop2) 에서 바깥쪽 반복문(loop1)까지 한 번에 탈출하려 할 때, 이를 이용하면 된다.
loop1: for (let i = 0; i < 3; i++) {
loop2: for (let j = 0; j < 3; j++) {
console.log(`loop1 : ${i}, loop2 : ${j}`);
break loop1;
}
}
// output :
// loop1 : 0, loop2 : 0
마찬가지로, loop2에서 loop1의 다음 iteration으로 직행하고 싶을 때도 아래와 같이 사용하면 된다.
loop1: for (let i = 0; i < 3; i++) {
loop2: for (let j = 0; j < 3; j++) {
console.log(`loop1 : ${i}, loop2 : ${j}`);
continue loop1;
}
}
// output :
// loop1 : 0, loop2 : 0
// loop1 : 1, loop2 : 0
// loop1 : 2, loop2 : 0