Oops, All Code!/📝 Study Notes

[JS] 렉시컬 스코프의 개념

밍동망동 2023. 1. 12. 02:00
1. 렉시컬 스코프

렉시컬 스코프는 정적 스코프라고도 한다.

 

함수 정의가 평가되는 시점

상위 스코프가 정적으로 결정되는 방식을 의미한다.

 

2. 렉시컬 스코프 예제

var score = 27;

function math(){
  var score = 30;
  english();
}

function english(){
  console.log(score);
}
math(); // 27
english(); // 27

이 경우 함수의 상위 스코프는 두 가지 예측이 가능하다.

1. 함수를 어디서 호출했는지

2. 함수를 어디서 정의했는지

 

2. 호출 : 동적 스코프(dynamic scope)

호출을 기준으로 상위 스코프가 결정된다면

 

english 함수의 상위 스코프는

math 함수의 지역 스코프와 전역 스코프다.

 

함수 정의 시점에 어디서 호출할지 알 수 없으므로

함수가 호출되는 시점에 동적으로 상위 스코프가 결정된다.

 

이 때문에 동적 스코프라고 부른다.

 

호출할 때마다 함수의 상위 스코프가 변한다.

 

3. 정의 : 렉시컬 스코프(lexical scope)

정의를 기준으로 상위 스코프가 결정된다면

 

english 함수의 상위 스코프는

전역 스코프다.

 

동적으로 스코프가 변하지 않고

함수 정의가 평가되는 시점

상위 스코프가 결정되기 때문에

정적 스코프(static scope)라고도 한다.

 

정의 시점에 이미 상위 스코프가 정해진다.

 

4. JS와 렉시컬 스코프

자바스크립트를 포함한 대부분의 언어는

렉시컬 스코프를 따른다.

 

따라서 호출 위치는 어떠한 영향도 주지 않으며

함수의 상위 스코프는

언제나 자신이 정의된 스코프다.

 

함수 정의가 실행되어 생성된

함수 객체는 결정된 상위 스코프를 기억한다.

그 속에서 호출할 때마다 상위 스코프를 참조하게 된다.

 

(클로저 관련 링크)