Excution Context(실행 컨텍스트) 란?
실행 컨텍스트는 실행할 코드에 제공할 환경 정보들을 모아놓은 객체다
자바스크립트 코드를 실행하면 전역 컨텍스트가 Call Stack에 담기게되고 실행중 우리가 작성한 함수나 객체 등 을 만나면(선언 될때가 아닌) 해당 환경 정보들을 담은 실행 컨텍스트를 생성하여 Call Stack에 담는다 따라서 전체코드의 환경과 순서를 보장 할 수 있다(LIFO)
실행 컨텍스트의 구조
1. VariableEnvironment
- 현재 컨텍스트 내에 식별자 정보(EnvironmentRecord) 및 외부환경 정보(OuterEnvironmentReference)가 담겨있다
- 선언 시점에 LexicalEnvironment의 스냅샷으로 변경사항은 반영되지 않는다
-> 실행 컨텍스트를 생성할때 VariableEnvironment에 먼저 정보를 담은다음 이를 복사해 LexicalEnvironment에 담는다
2. LexicalEnvironment
- 초기에는 VariableEnvironment와 같지만 변경사항이 실시간으로 반영된다
environmentRecord : 코드가 실행되기전 현재 컨텍스트와 관련된 코드의 식별자가 저장된다, 즉 코드가 실행되기전 자바스크립트 엔진은 이미 해당 컨텍스트 내부의 변수명을 알고있다(호이스팅)
outerEnvironmentReference : 자신이 선언될 당시의 LexicalEnvironment를 참조한다, 즉 해당 컨텍스트를 생성한 함수의 바깥 환경을 참조한다(순차적으로 접근)
3. thisbinding
- this 식별자가 바라봐야할 객체, 실행 컨텍스트가 활성화 될 때 this가 지정되지 않은경우 this는 전역객체를 가르킨다
- method 에서 사용시 해당 method의 instance, object를 가르킨다