fun a 스코프는 1개이고, for문의 스코프는 5개
a 스코프에서 i는 0 -> 5 가 되는거고, for 문의 스코프에서 i 는 0,1,2,3,4 가 되는것
function a() {
for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, i * 1000);
}
}
a();
//5
//5
//5
//5
//5
var 은 함수단위스코프를 가지기 때문에 i값은 for에서 찾지않고 그상위인 a 함수에서 찾는다.
그경우 a 함수에서 i는 이미 루프가 끝난 5 인 상태이기 때문에 5가 출력된다.
function a() {
for (let i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i);
}, i * 1000);
}
}
a();
//0
//1
//2
//3
//4
var 을 let 으로 바꿀경우 let은 블록단위 스코프를 가지기 때문에 i의 값은 for 안에서 사용된다.
그러므로 정상적으로 i는 0,1,2,3,4 가 출력되게된다.