LHJ

I'm a FE developer.

4.2.4 for 루프의 다른 패턴

19 Apr 2020 » js_lj

쉼표 연산자를 쓰면 초기화와 마지막 표현식에 여러 문을 결합할 수 있습니다.
예를 들어 다음 for 루프는 피보나치 수열의 숫자 중 처음 여덟 개를 출력합니다.

for (let temp, i =0, j=1; j<30; temp = i, i = j, j = i+temp)
	console.log(j);

이 예제에서는 초기화를 하면서 변수 temp와 i, j를 동시에 선언했고, 마지막 표현식에서 세 변수를 동시에 조작했습니다.
for 루프의 제어부에 아무것도 쓰지 않으면 무한 루프가 만들어집니다.

for(;;) console.log("I will repeat forever!");

for 루프에서 조건을 생략하면 항상 true로 평가되므로 루프를 빠져나갈 수 없습니다.

for 루프는 보통 정수 인덱스를 늘이거나 줄이면서 반복하지만, 꼭 그래야 하는 건 아닙니다.
어떤 표현식이든 쓸 수 있습니다.
다음 예제를 보십시오.

let s = '3';                        // 숫자가 들어있는 문자열
for(; s.length<10; s = ' ' + s);    // 문자열의 길이를 조건으로 썼습니다.
                                    // 여기서 사용한 for 루프 마지막에 세미콜론이 없으면
                                    // 에러가 일어납니다.
																		
for (let x= 0.2; x<3.0; x +=0.2)    // 제어 변수가 정수가 아니어도 괜찮습니다.
	console.log(x);
	
for (; !player.isBroke;)            // 조건에 객체 프로퍼티를 썼습니다.
	console.log("Still playing!");

for 루프는 모두 while 루프로 고쳐 쓸 수 있습니다.
예를 들어 다음 코드를 보십시오.

for([initialization]; [condition]; [final-expression])
	statement

앞에서 본 코드는 다음 코드와 똑같이 동작합니다.

[initialization]
while([condition]) {
	statement
	[final-expression]
}

for 루프를 while 루프를 바꿀 수 있다는 것뿐이지, 그렇게 해야 한다는 건 아닙니다.
for 루프의 장점루프의 제어부가 첫 번째 행에 모여 있어서 일목요연하게 파악할 수 있다는 겁니다.
또한, for 루프에서는 let으로 초기화한 변수가 for 루프 안에서만 유효하다는 장점도 있습니다(7장에서 더 설명합니다).
이런 for문을 while 문으로 바꾸면, 컨트롤 변수는 루프 바깥에서도 볼 수 있게 됩니다.