왜 다르게 동작할까요?
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
}