본문 바로가기

JavaScript

[JavaScript] 반복문의 출력값 예상하기

- while 반복문의 마지막 값

: 아래 두 예시는 같은 값을 출력할까?

// 전위형 증가 연산자를 사용한 경우(++i):
let i = 0;
while (++i < 5) alert( i );

// 후위형 증가 연산자를 사용한 경우(i++):
let i = 0;
while (i++ < 5) alert( i );

해답 : 더보기

더보기

전위형 증가 연산자를 사용한 경우엔 1부터 4까지 출력됩니다.++i는 i를 먼저 증가시키고 새로운 값을 반환하기 때문에 첫 번째 while 반복문에선 1과 5를 비교(1 < 5)하고, 얼럿 창엔 1이 출력됩니다.i = 4 이후에 i의 값이 5로 증가하면 while(5 < 5)안의 비교가 실패하기 때문에 반복문은 멈춥니다. 따라서 5는 출력되지 않습니다.

1에 이어서 2, 3, 4…이 출력됩니다. i 앞에 ++가 붙어있기 때문에 5는 항상 증가 이후의 값과 비교됩니다.

let i = 0;
while (++i < 5) alert( i );

후위형 증가 연산자를 사용한 경우엔 1부터 5까지 출력됩니다.후위 증가 연산자를 적용하면 i++는 i를 증가시키긴 하지만 기존 값을 반환합니다. 따라서 첫 번째 while 반복문에선 0과 5를 비교(0 < 5)합니다. 이 점이 전위 증가 연산자와의 차이입니다.1이 출력된 이후에 2, 3, 4…가 이어서 출력됩니다.다음 반복문은 while(5 < 5)이므로 마지막 출력되는 값은 5가 됩니다.

i = 4일 때 잠시 생각을 가다듬어 봅시다. 전위 증가 연산자(++i)를 사용하면 값이 먼저 증가하기 때문에 5와 5를 비교하게 되는데, 여기선 후위 증가 연산자(i++)를 사용하고 있으므로 i는 증가하지만 기존 값인 4가 비교에 사용됩니다. 따라서 while(4 < 5)가 되고, 해당 조건은 참이므로 하단 블록이 실행되어 alert 창이 뜨게 됩니다.

그런데 alert문은 조건문과 별개의 문이므로 얼럿창엔 1이 출력됩니다. i는 이미 증가한 이후이기 때문이죠.

let i = 0;
while (i++ < 5) alert( i );

 

- for 반복문의 출력값 예상하기

: 아래 두 예시는 같은 값을 출력할까?

// 후위형 증가 연산자를 사용한 경우(i++):
for (let i = 0; i < 5; i++) alert( i );

//전위형 증가 연산자를 사용한 경우(++i):
for (let i = 0; i < 5; ++i) alert( i );

해답 : 더보기

더보기

두 경우 모두 0부터 4까지 출력됩니다.

 
for (let i = 0; i < 5; ++i) alert( i );

for (let i = 0; i < 5; i++) alert( i );

for문의 알고리즘을 떠올려보면 쉽게 추론할 수 있는 문제입니다.

  1. 모든 작업이 시작되기 전 일단 i = 0입니다.
  2. i < 5 조건을 만족하는지 확인합니다.
  3. 위 조건이 true이면 반복문의 본문 alert(i)가 실행되고, 그 이후 i++가 실행됩니다.

i++는 위 알고리즘의 두 번째 단계(조건 확인)와 별개로 실행됩니다. 전혀 다른 구문이기 때문이죠.

증가 연산자가 반환하는 값은 (2) 에서 쓰이지 않기 때문에 i++와 ++i에 차이가 없습니다.

'JavaScript' 카테고리의 다른 글

[JavaScript] 함수  (0) 2022.04.24
[JavaScript] switch문  (0) 2022.04.24
[JaveScript] nullish 병합 연산자 '??'  (0) 2022.04.23
[JavaScript] 논리 연산자  (0) 2022.04.23
[JavaScript] 조건부 연산자 '?'  (0) 2022.04.23