렉시컬 스코프는 자바스크립트 엔진에서 함수 호출 시 함수를 어디서 호출 했는지가 중요한 것이 아닌 함수 정의한 곳 위치에서 상위 스코프를 결정하는 것을 의미합니다.
예시로 innerFunc 함수
정의 위치에 따라 함수의 결과 값이 달라집니다.
const x = 1;
const outerFunc = () => {
const x = 10;
const innerFunc = () => {
console.log(x); // 10
};
innerFunc();
};
outerFunc();
outerFunc
와 innerFunc
함수는 모두 전역 함수로 정의가 됩니다. 때문에 innerFunc 함수가 정의 된 위치에 따라 상위 스코프는 달라집니다.
const x = 1;
const outerFunc = () => {
const x = 10;
innerFunc();
};
const innerFunc = () => {
console.log(x); // 1
};
outerFunc();
따라서 함수의 상위 스코프는 함수 정의 위치에 결정이 됩니다. 즉 렉시컬 환경의 외부 렉시컬 환경에 대한 참조에 저장할 참조값을 결정합니다.