해당 문제 해설을 제가 잘 이해한건지 알고싶어 작성했습니다.
for (var i = 1; i < 6; i++) {
setTimeout(function() {
console.log(i);
}, i * 1000);
}
위의 코드처럼 반복문의 변수 선언에 var 키워드를 사용하면, 블록 스코프가 아닌 var 키워드는 전역 변수가 되서 반복문이 실행될 당시에는 i의 값이 정상적으로 올라가지만 setTimeout 함수때문에 시간이 흐르고 내부의 console.log(i); 코드를 실행시킬 때는 이미 전역변수로 선언된 i가 5가 되어버려서 전역변수인 i를 참조하게 되고
for (let i = 1; i < 6; i++) {
setTimeout(function() {
console.log(i);
}, i * 1000);
}
위의 코드처럼 반복문의 변수 선언에 let을 사용하면 실행되는 모습을 구현하게 된다면
i = 1인 경우
let i = 1;
setTimeout(function() {
console.log(1);
}, 1 * 1000);
i = 2인 경우
let i = 2;
setTimeout(function() {
console.log(2);
}, 2 * 1000);
이렇게 반복문이 5회 실행되는 동안 i 변수를 계속 선언하고 초기화 후 할당해서 반복문 내에 몰래 집어 넣게 되는건가요?
제가 작성하고도 뭔가 아리송하네용