본문 바로가기

나의 FE피봇이야기/Javascript

[Javascript] scope 범위 (EnvironmentRecord / LexicalEnvironment)

이 내용은 책 '코어 자바스크립트'를 보고 저의 개인적인 해석으로 작성된 내용입니다.

내용이 틀릴 수도 있으니 중의 하시기 바랍니다.

 

실행 콘텍스트

- 실행 콘텍스트는 실행할 코드에 제공할 환경 정보들을 모아놓은 객체.

- 실행 컨텍스트 객체는 활성화 되는 시점에 variableEnviroment, LexicalEnvironment, ThisBinding  세 가지 정보 수집.

 

실행 콘텍스트를 생성할 때

VariableEnvironment와 LexicalEnvironment가 동일한 내용으로 구성.

LexicalEnvironment는 함수 실행 도중에 변경되는 사항이 즉시 반영되는 반면(<->) VariableEnvironment는 초기 상태 유지.

VariableEnvironment와 LexicalEnvironment는 매개변수명, 변수의 식별자, 선언한 함수명 등을 수집하는 environmentRecord와 바로 직전 콘텍스트 LexicalEnvironment 정보를 참조하는 outerEnvironmentaReference로 구성.


 

scope, scope chain

outerEnvironmetReference는 현재 호출된 함수가 선언될 당시의 LexicalEnvironment 참조(과거 시점인 '선언될 당시'에 주목해 필요).

'선언하다'라는 행위가 실제로 일어날 수 있는 시점이란 콜 스택 상에서 어떤 실행 컨텍스트가 활성화된 상태일 때뿐.