JavaScript 2.13
While과 for 반복문
- 반복문을 사용하면 동일한 코드를 여러번 반복할 수 있다.
while 반복문
while (condition) {
// 코드
// 반복문 본문
}
- condition이 참이면 반복문 본문의 코드가 실행된다.
- 반복문 본문이 한 번 실행되는 것을 반복(iteration)이라고 부른다.
- 반복문 조건엔 비교뿐만 아니라 모든 종류의 표현식, 변수가 올 수 있다.
- 조건은 while에 의해 평가되고 평가 후엔 불린값으로 변경된다.
do while 반복문
- Do while 문법을 사용하면 condition을 반복문 본문 아래로 옮길 수 있다.
do {
// 반복문 본문
} while (condition);
- 본문이 먼저 실행되고 조건을 확인한 후 조건이 참일 동안엔 본문이 계속 실행된다.
let i = 0;
do {
alert( i );
i++;
} while (i < 3);
- do while 문법은 조건이 참인지 아닌지에 상관없이 본문을 최소한 한번이라도 실행하고 싶을 때만 사용한다.
- 대다수의 상황에선 while이 적합하다.
for 반복문
for (begin; condition; step) {
// 반복문 본문
}
- Begin : 반복문에 진입할 때 단 한번 실행된다.
- Condition : 반복마다 해당 조건이 확인된다. false이면 반복문이 멈춘다.
- Body : 상태가 참일 동안 계속해서 실행된다.
-
Step : 각 반복의 body가 실행된 이후에 실행된다.
- 인라인 변수 선언
- 카운터 변수를 반복문 안에서 선언하는 것을 인라인 변수 선언이라고 한다.
for (let i = 0; i < 3; i++) {
alert(i); // 0, 1, 2
}
alert(i); // Error: i is not defined
- 구성 요소를 생략하는 것도 가능하다.
// begin 생략
let i = 0; // i를 선언하고 값도 할당하였습니다.
for (; i < 3; i++) { // 'begin'이 필요하지 않기 때문에 생략하였습니다.
alert( i ); // 0, 1, 2
}
// step 생략
let i = 0;
for (; i < 3;) {
alert( i++ );
}
// 모든 구성 요소 생략
for (;;) {
// 끊임 없이 본문이 실행됩니다.
}
- 구성 요소를 생략할 때 주의점은 세미콜론을 넣어주어야 한다는 점이다.
반복문 빠져나오기
- 반복문의 조건이 거짓이 되면 반복문이 종료된다.
- 특별한 지시자인 break를 사용하면 언제든 원하는 때에 반복문을 빠져나올 수 있다.
다음 반복으로 넘어가기
- Continue 지시자는 현재 실행중인 이터레이션을 멈추가 본복문이 다음 이터레이션을 강제로 실행시키도록 한다.(조건을 통과할 때)
for (let i = 0; i < 10; i++) {
// 조건이 참이라면 남아있는 본문은 실행되지 않습니다.
if (i % 2 == 0) continue;
alert(i); // 1, 3, 5, 7, 9가 차례대로 출력됨
}
- 중첩을 줄이는데 도움을 준다.
for (let i = 0; i < 10; i++) {
if (i % 2) {
alert( i );
}
}
- 삼항 연산자 ?에는 break나 continue를 사용할 수 없다.
break/continue와 레이블
- 여러개의 중첩반복문을 한번에 빠져나와야 하는 경우가 생기곤 한다.
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
let input = prompt(`(${i},${j})의 값`, '');
// 여기서 멈춰서 아래쪽의 `완료!`가 출력되게 하려면 어떻게 해야 할까요?
}
}
alert('완료!');
- 반복문을 중단시키고 완료가 뜨도록 해야하는 경우 input 아래에 평범한 break 지시자를 사용하면 안쪽에 있는 반복문만 빠져나올 수 있다.
- 하지만 중첩일 경우 충분하지 않다.(두개를 빠져나와야 하기 때문에)
- 이럴때 레이블(label)을 사용한다.
labelName: for (...) {
...
}
- 반복문 안에서 break
문을 사용하면 레이블에 해당하는 반복문을 빠져나올 수 있다.
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; // (*)
// 입력받은 값을 가지고 무언가를 함
}
}
alert('완료!');
- 레이블을 별도의 줄에 써주는 것도 가능하다.
outer:
for (let i = 0; i < 3; i++) { ... }
- break와 continue는 반복문 안에서 사용할 수 있고, 레이블을 반드시 break나 continue 지시자 위에 있어야 한다.