while 반복문의 출력값 예상하기
while 반복문이 순차적으로 실행될 때마다 얼럿 창에 어떤 값이 출력될지 예상해보세요.
아래 두 예시는 같은 값을 출력할까요?
-
전위형 증가 연산자를 사용한 경우(
++i):let i = 0; while (++i < 5) alert( i ); -
후위형 증가 연산자를 사용한 경우(
i++):let i = 0; while (i++ < 5) alert( i );
이 문제는 비교 연산자와 후위/전위형 연산자를 함께 사용하는 경우 어떤 차이가 있는지 보여줍니다.
-
전위형 증가 연산자를 사용한 경우엔 1부터 4까지 출력됩니다.
let i = 0; while (++i < 5) alert( i );++i는i를 먼저 증가시키고 새로운 값을 반환하기 때문에 첫 번째 while 반복문에선 1과 5를 비교(1 < 5)하고, 얼럿 창엔1이 출력됩니다.1에 이어서2, 3, 4…이 출력됩니다.i앞에++가 붙어있기 때문에5는 항상 증가 이후의 값과 비교됩니다.i = 4이후에i의 값이5로 증가하면while(5 < 5)안의 비교가 실패하기 때문에 반복문은 멈춥니다. 따라서5는 출력되지 않습니다. -
후위형 증가 연산자를 사용한 경우엔 1부터 5까지 출력됩니다.
let i = 0; while (i++ < 5) alert( i );후위 증가 연산자를 적용하면
i++는i를 증가시키긴 하지만 기존 값을 반환합니다. 따라서 첫 번째 while 반복문에선 0과 5를 비교(0 < 5)합니다. 이 점이 전위 증가 연산자와의 차이입니다.그런데
alert문은 조건문과 별개의 문이므로 얼럿창엔1이 출력됩니다.i는 이미 증가한 이후이기 때문이죠.1이 출력된 이후에2, 3, 4…가 이어서 출력됩니다.i = 4일 때 잠시 생각을 가다듬어 봅시다. 전위 증가 연산자(++i)를 사용하면 값이 먼저 증가하기 때문에 5와5를 비교하게 되는데, 여기선 후위 증가 연산자(i++)를 사용하고 있으므로i는 증가하지만 기존 값인4가 비교에 사용됩니다. 따라서while(4 < 5)가 되고, 해당 조건은 참이므로 하단 블록이 실행되어alert창이 뜨게 됩니다.다음 반복문은
while(5 < 5)이므로 마지막 출력되는 값은5가 됩니다.