클로저 문제
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 가 출력되게된다.
Author And Source
이 문제에 관하여(클로저 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dldnjsgy5912/클로저-문제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)