실행할 코드에 제공할 환경 정보들을 모아놓은 객체이다.
자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할 수 있는 개념이다.
자바스크립트는 어떤 실행 컨텍스트가 활성화되는 시점에 선언된 변수를 위로 끌어올리고,
외부 환경 정보를 구성하고, this값을 성정하는 등의 동작을 수행한다.
스택은 출입구가 하나뿐인 데이터 구조이다.
큐는 한쪽은 입력만, 다른 한쪽은 출력만을 담당하는 구조이다.
실행 컨텍스트는 동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고,
이를 콜스택에 쌓아 올린다.
그 후, 가장 위에 있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장한다.
여기서 동일한 환경(하나의 실행 컨텍스트)를 구성할 수 있는 방법으로 전역공간, eval()함수, 함수 등이 있다.
자동으로 생성되는 전역공간과 악마로 취급받는 eval을 제외하면
실행 컨텍스트를 직접 구성하는 방법은 함수를 실행하는 것이다.
// ------------------------ (1)
var a = 1;
function outer() {
function inner() {
console.log(a);
var a = 3;
// ------------------ (2)
}
inner(); // ------------ (3)
console.log(a);
// --------------------- (4)
}
outer(); // --------------- (5)
console.log(a);
// -------------
처음 자바스크립트 코드를 실행하는 순간(1) 전역 컨텍스트가 콜 스텍에 담긴다.
코드를 순차로 진행하다가 outer함수를 호출하면 (3) 자바스크립트 엔진은 outer함수 관련 환경 정보를 수집해서 outer실행 컨텍스트를 생성한 후 콜 스택에 담는다.
전역 컨텍스트의 실행을 중단하고 outer 실행 컨텍스트와 관련된 코드(outer함수 내부)를 실행한다.
그러다 inner함수가 콜 스택 가장 위에 담기면 (2) inner 함수 내부를 실행한다.
inner함수 실행 후 변수 a에 3을 할당하고 나면 inner함수를 콜스택에서 제거한다.
중단되었던 outer 함수를 바로 시작하고, a변수의 값을 출력한다.
그리고 outer함수도 종료되어 제거되고, 전역 컨텍스트도 제거되어 콜스택에는 아무것도 남지 않은 상태로 종료된다.
실행 컨텍스트에 담기는 정보들은 다음과 같다.