더북(TheBook)

var를 사용하면서 문제를 해결하고 싶다면 i 변수의 값을 고정할 방법을 찾아야 합니다. leti 변수가 블록마다 값이 고정되는 것처럼 vari 변수 값도 고정하면 됩니다. vari 변수는 함수 스코프이므로 함수마다 값이 고정되겠죠? 따라서 클로저가 i 변수 대신 고정된 값을 가리키게 하면 됩니다. 그래서 다음과 같이 helper()라는 고차 함수를 선언합니다.

const number = [1, 3, 5, 7];
function helper(j) {
  return () => {
    console.log(number[j], j);
  }
}
for (var i = 0; i < number.length; i++) {
  setTimeout(helper(i), 1000 * (i + 1));
}
1 0
3 1
5 2
7 3
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.