<출처>
쉽게 이해하는 JavaScript 객체지향 & ES6 신문법
'변수 연습문제' 수업 관련 질문입니다.
<수업 내용>
아래 코드의 문제는 0,1,2,3,4,5 이렇게 출력되어야 하는데, 5만 출력되는 문제라고 하셨습니다.
for (var i = 0; i < 6; i++) {
setTimeout(() => {console.log(i)}, i*1000)
}
이 문제의 원인은 setTimeout의 콜백함수(console.log...)를 실행하기 전에(setTimeout이니 딜레이가 있겠죠)
반복문이 계속 실행되어서 결국 i = 5가 되어서야 콜백함수가 실행된다는 점입니다.
이를 해결하기 위해
var -> let 으로 바꾸면 해결된다고 하셨고, 결국 해결은 됩니다.
<질문 내용>
var를 let으로 바꾼다고 왜 문제가 해결되는지 이해가 안갑니다.
문제의 원인은 반복문의 실행 속도와 setTimeout 코드의 실행 속도 차이인데,
var를 let으로 바꾼다고 왜 해결되는지 모르겠습니다..
답변 부탁드립니다.