자바스크립트 실행 컨텍스트
자바스크립트 핵심 개념· 2 / 9
실행 컨텍스트(Execution Context)
실행 컨텍스트는 내부적으로 자바스크립트 엔진이 실행할 코드에 제공할 환경 정보를 담고 있는 구조체이다.
동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성 하고, 이를 콜스택에 쌓아올렸다가, 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장한다.
하나의 실행 컨텍스트를 구성할 수 있는 방법으로 전역공간, eval(), 함수 등이 있지만, 흔히 실행 컨텍스트를 구성하는 방법은 함수를 실행하는 것뿐이다.
실행 과정

1. 자바스크립트 파일이 열리는 순간 전역 컨텍스트가 콜스택에 담겨 활성화된다.
2. 코드를 순차로 진행하다가 함수가 호출되면 해당 함수의 환경 정보를 수집해서 실행 컨텍스트를 생성하고 콜스택에 담긴다.
3. 새로운 실행 컨텍스트가 콜스택의 최상단에 놓이면 기존의 실행 컨텍스트를 일시중단하고 새로운 함수와 관련된 코드를 순차로 실행한다.
4. 실행 컨텍스트 내부에 더 이상의 함수 호출이 없이 코드가 모두 실행되면 해당 실행 컨텍스트는 콜스택에서 제거되고 직전의 실행 컨텍스트가 재개된다.
5. 2~4 과정을 거쳐 모든 코드가 실행되고 나면 전역 컨텍스트가 제거되어 콜스택에 아무것도 남지 않은 상태로 종료된다.한 실행 컨텍스트가 콜 스택의 맨 위에 쌓이는 순간이 곧 현재 실행할 코드에 관여하게 되는 시점이 된다.
수집된 환경 정보
실행 컨텍스트가 생성될 때 내부에는 아래와 같은 환경 정보가 함께 수집된다.

-
VariableEnvironment
실행 컨텍스트를 생성할 때 현재 컨텍스트 내의 환경 정보를 담고 종료될 때까지 스냅샷을 유지한다. -
LexicalEnvironment
VariableEnvironment의 복사본으로서 변경 사항이 실시간으로 반영된다.environmentRecord: 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다.(매개변수 식별자, 함수, 선언된 식별자 등)outerEnvironmentReferece: 직전 컨텍스트의 LexicalEnvironment 정보를 참조한다.
-
ThisBinding
실행 컨텍스트 활성화 당시에 지정된 this가 저장된다.