더북(TheBook)

또 다른 방법은 for 문 대신 forEach() 메서드를 사용하는 것입니다. forEach()의 콜백 함수마다 고정된 i 값을 갖고 있어서 가능한 방식입니다.

const number = [1, 3, 5, 7];
number.forEach((num, i) => {
  setTimeout(() => {
    console.log(num, i);
  }, 1000 * (i + 1));
});

반복문과 var를 사용할 때 항상 스코프 관련 문제가 생기는 것은 아닙니다. setTimeout() 같은 비동기 함수와 반복문, var가 만나면 이런 문제가 발생합니다. 이러한 현상을 잘 알고 있으면 좋지만, 사실 let을 쓰는 것이 가장 편합니다. 그래서 요즘은 대부분 var 대신 let을 사용합니다.

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