스코프(Scope)는 변수의 유효 범위를 말한다.
모든 변수는 스코프를 갖는다. 변수의 관점에서 스코프를 구분하면 아래와 같다.
function test(){
var a = 10; // 함수 레벨 스코프
console.log(a);
}
console.log(test()); // 10
console.log(a) // 에러!
위와 같이 var는 함수 레벨 스코프, 아래와 같이 let과 const는 블록 레벨 스코프이다.
if(true){
const a = 10; // 블록 레벨 스코프
console.log(a); // 10
}
console.log(a); // 에러!
렉시컬 스코프는 함수를 어디서 호출하는지가 아니라 어디에 선언하였는지에 따라 결정된다.
var x = 1;
function foo() {
var x = 10;
bar();
}
function bar() {
console.log(x);
}
foo(); // 1
bar(); // 1
참고자료