왜 다르게 동작할까요?
About JS, 스코프, 클로저
2023/11/09
❗️ 스코프와 클로저의 개념에 대해 자세히 다루지 않습니다.
함수 a()와 b() 모두 콜백함수에 클로저가 사용됩니다.
하지만 결과가 다른 이유는 두 변수의 스코프가 다르기 때문입니다.
var는 함수 스코프, let은 블록 스코프
변수의 선언 방식에 따라 스코프가 달라집니다.
var는 함수 레벨의 스코프를 가지기 때문에 for문이 종료되어도 함수 a의 스코프 내에서 참조가 가능합니다. 아래처럼요.
function example() {
for (var i = 0; i < 10; i++) {
// do something
}
console.log(i); // 10
}
하지만 let은 블록 레벨 스코프를 가지기 때문에 for문이 종료되면 해당 블록 내에서 선언한 변수는 접근할 수 없습니다.
function example() {
for (let i = 0; i < 10; i++) {
// do something
}
console.log(i); // Uncaught ReferenceError: i is not defined
}