여러 동작을 차례대로 반복할 때 유용한 반복문
기본 사용법은 익혔지만 응용이 어렵게 느껴진다.
각 반복문의 특징을 정확히 알아놓을 필요가 있다.
let i = 3;
while (i) { // i가 0이 되면 조건이 falsy가 되어 반복문이 멈춘다.
alert( i );
i--;
}
반복문의 조건에는 비교뿐만 아니라 여러 표현식이나 변수가 들어갈 수 있다. 조건이 false인 경우 종료된다.
let i = 0;
do {
alert( i );
i++;
} while (i < 3);
do..while 은 조건이 true인지 아닌지에 상관없이,
본문을 한번이라도 먼저 실행하고 싶을 때만 사용해야 하기에
대다수의 상황에선 do..while보다 while(…) {…}이 적합하다.
정확히 어떤 과정을 거치는지는 아래처럼 확인하기
// for (let i = 0; i < 3; i++) alert(i)
// begin을 실행
let i = 0
// condition이 truthy이면 → body를 실행한 후, step을 실행함
if (i < 3) { alert(i); i++ }
// i < 3이 truthy이면 → alert(i)를 실행한 후, i++을 실행함
if (i < 3) { alert(i); i++ }
// 2 < 3이 truthy이면 → alert(2)를 실행한 후, 2+1을 실행함
if (i < 3) { alert(i); i++ }
// i == 3이므로 반복문 종료
for 반복문의 변수 i를 반복문 안에서 선언하는
인라인변수 방식 외에도
정의되어있는 변수를 사용하는 방식도 가능하다.
let i = 0;
for (i = 0; i < 3; i++) { // 기존에 정의된 변수 사용
alert(i); // 0, 1, 2
}
alert(i); // 3, 반복문 밖에서 선언한 변수이므로 사용가능
보통 반복문의 조건이 false이면 종료되는데
break를 사용하면 원하는 때에 반복문을 빠져나올 수 있다.
continue 지시자는 break의 '가벼운 버전’으로
현재 실행 중인 반복자만 멈추고 다음 반복으로 강제로 넘어가게 한다.
// 홀수만 출력하는 반복문
for (let i = 0; i < 10; i++) {
// 조건이 참이라면 남아있는 본문은 실행되지 않음
if (i % 2 == 0) continue;
alert(i); // 1, 3, 5, 7, 9
}
이번에 공부하다가 새로 알게된 부분
레이블은 콜론과 함께 쓰이는 식별자로 반복문 앞에 온다.
(바로 앞에 올 수도 있고 별도의 줄에 써주는 것도 가능)
outer:
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`(${i},${j})의 값`, '');
// 사용자가 아무것도 입력하지 않거나
Cancel 버튼을 누르면 두 반복문 모두를 빠져나온다.
if (!input) break outer; // 여기서
outer라는 레이블이 붙은 반복문을 찾아 빠져나오게 된다.
// 입력받은 값을 가지고 무언가를 함
}
}
alert('완료!');
break/continue에 이 레이블을 함께 사용할 수 있고
레이블은 중첩 반복문을 빠져나와 바깥의 반복문으로
바로 갈 수 있게 해주는 유일한 방법!
- while 반복문으로 보는 전위 / 후위형 연산자의 차이
let i = 0; while (++i < 5) alert( i );-> 전위형 증가 연산자를 쓰면 i를 먼저 증가시키고 값이 반환되어
1, 2, 3, 4 가 출력된다.let i = 0; while (i++ < 5) alert( i );-> 후위형 증가 연산자를 쓰면 기존값으로 비교 후 i를 증가시키기 때문에 1, 2, 3, 4, 5 가 출력된다.