
스코프는 식별자(변수,함수의 이름)가 유효한 범위를 나타낸다.
선언된 위치에 따라 유효범위가 결정된다.
스코프를 사용하면 이름충돌을 막을 수 있고 메모리를 절약할 수 있다.
코드 전체의 범위로 코드 어디에서든지 참조 가능, 전역 변수의 범위
코드 블록{}내의 범위로 코드 블록 내에서만 참조가능, 지역변수의 범위
오늘날 js의 변수(let,const)는 블록 레벨 스코프를 따른다.
코드 블록{}에는 일반적인 {}, 조건문() {}, 반복문() {}, function() {} 등이 있다.
코드 📄
let x ='global'; // 전역 스코프
{ // 지역 스코프(블록 레벨 스코프)
let x= 'local';
console.log(x); // local
}
console.log(x); // global
코드 📄
{
const x= 10;
{
const y= 20;
console.log(x); // 10
}
console.log(x); // 10
console.log(y); // ReferenceError: y is not defined
}
해설
결론
외부 블록에서는 내부 블록에 있는 변수를 참조 할 수 없고 오직 내부에서만 외부블록의 변수를 참조 할 수 있다.
각각의 코드 블록은 렉시컬 환경이라는 내부 객체를 가지고 있다.
const a=1;
{
const a=2;
{
console.log(a); //2
}
}
해설
자신의 블록에서 a라는 값이 없기 때문에 자신이 참조하고 있는 부모 블록에 가서 a라는 값을 확인하고 있으면 가져온다.
이것이 가능한 이유는 실행 컨텍스트가 코드의 실행 순서와 스코프를 기억하고 있고
각각의 코드블록안에는 렉시컬 환경을 가지고 있기 때문이다.