더북(TheBook)

setTimeout()의 콜백 함수(굵은 글씨 부분)는 외부 변수 i에 접근하는 클로저입니다. 이때 1000 * (i + 1)console.log(number[i])가 같은 시점에 실행된다고 착각하는 경우가 많습니다. 그러나 setTimeout() 인수인 1000 * (i + 1)은 반복문을 돌 때 실행되고, 클로저는 지정한 시간 뒤에 호출됩니다. 그런데 반복문은 매우 빠른 속도로 돌아서 클로저가 실행될 때는 이미 i가 4(numbers.length도 4)가 되어 있습니다.

i가 0일 때 setTimeout(콜백, 1000) 실행

i가 1일 때 setTimeout(콜백, 2000) 실행

i가 2일 때 setTimeout(콜백, 3000) 실행

i가 3일 때 setTimeout(콜백, 4000) 실행

i가 4일 때 4 < numbers.lengthfalse이므로 반복문이 끝남

1초 후 콜백 함수 실행(i는 4)

2초 후 콜백 함수 실행(i는 4)

3초 후 콜백 함수 실행(i는 4)

4초 후 콜백 함수 실행(i는 4)

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.