실행 컨텍스트 요약
- 실행할 코드에 제공할 환경 정보들을 모아놓은 객체
- 자바스크립트의 동적 언어로서 성격을 가장 잘 파악할 수 있는 개념
자바스크립트는 실행 컨텍스트가 활성화되는 시점에 다음과 같은 현상이 발생한다.
ECMAScript 사양은 소스코드를 전역코드, 함수코드, eval 코드, 모듈코드 4가지 타입으로 구분한다.
자바스크립트 엔진은 소스코드를 소스코드의 평가와 소스코드의 실행 과정으로 나누어 처리한다. 평가 과정에서 실행 컨텍스트를 생성하고, 변수, 함수 등의 선언문만 먼저 실행하여 생성된 변수를 실행 컨텍스트가 관리하는 스코프에 등록한다.
실행 컨텍스트는 위와 같이 소스코드를 실행하는데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다. 이때 식별자와 스코프는 실행 컨텍스트의 렉시컬 환경으로 관리하고 코드 실행 순서는 실행 컨텍스트 스택으로 관리한다.
const x = 1;
function foo () {
const y = 2;
function bar () {
const z = 3;
console.log(x + y + z);
}
bar();
}
foo(); // 6
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
bar 함수 실행 컨텍스트 | ||||
foo 함수 실행 컨텍스트 | foo 함수 실행 컨텍스트 | foo 함수 실행 컨텍스 | ||
전역 실행 컨텍스트 | 전역 실행 컨텍스트 | 전역 실행 컨텍스트 | 전역 실행 컨텍스트 | 전역 실행 컨텍스트 |
스코프와 식별자를 관리하는 렉시컬 환경은 객체 형태의 스코프를 생성하여 식별자를 키로 등록하고 식별자에 바인딩된 값을 관리한다. 렉시컬 환경은 환경레코드(Environment Record), 외부렉시컬 환경에 대한 참조(Outer Lexical Environment Reference) 두 개의 컴포넌트로 구성되는데, 환경 레코드는 스코프에 포함된 식별자를 등록하고 등록된 식별자에 바인딩된 값을 관리하는 저장소다. 외부 렉시컬 환경에 대한 참조는 외부 렉시컬 환경, 즉 해당 실행 컨텍스트를 생성한 소스코드를 포함하는 상위 코드의 렉시컬 환경을 참조하여 단방향 링크드 리스트인 스코프 체인을 구현한다.