14.2.2 스코프와 비동기적 실행
비동기적 실행에서 혼란스럽고 에러가 자주 일어날 수 있는 부분 => 스코프와 클로저가 비동기적 실행에 영향을 미치는 부분
콜백은 자신이 선언한 스코프(클로저)에 있는 것에 접근할 수 있음
잘못된 예제
function countdown() {
let i;
console.log("Countdown: ");
for (i=5; i>=0; i--) {
setTimeout(function() {
console.log(i === 0 ? "GO!" : i);
}, (5-i) * 1000)
}
}
countdown();
위의 코드를 실행하면 -1 이 여섯 번 반복됨
Why? 변수를 for 루프 밖에 선언했으므로
해결방법
function countdown() {
console.log("Countdown: ");
for (let i=5; i>=0; i--) { // i를 블록 스코프 변수로 변경
setTimeout(function() {
console.log(i === 0 ? "GO!" : i);
}, (5-i) * 1000)
}
}
countdown();
Last updated