대부분의 프로그래밍 언어에선 콜스택(함수를 호출할 때 해당 함수의 호출 정보가 차곡차곡 쌓여있는 스택)의 방식을 사용한다
자바스크립트도 콜 스택의 범주를 크게 벗어나지 않는다
실행 컨텍스트는 콜 스택에 들어가는 실행 정보 하나와 비슷하다
ECMA에선 실행 컨텍스트를 "실행 가능한 코드를 형상화하고 구분하는 추상적인 개념"으로 기술한다
이를 콜 스택과 연관하여 정의하면 "실행 가능한 자바스크립트 코드 블록이 실행되는 환경"이라고 할 수 있고, 이 컨텍스트 안에 실행에 필요한 여러가지 정보를 담고 있다
여기서 말하는 실행 가능한 코드 블록은 대부분의 경우 함수가 된다
ECMA에서 규정한 실행 컨텍스트가 형성되는 3가지 경우
대부분의 프로그래머는 함수로 실행 컨텍스트를 만들고 이 코드 블록 안에 변수 및 객체, 실행 가능한 코드가 들어있다
이 코드가 실행되면 실행 컨텍스트가 생성되고, 실행 컨텍스트는 스택 안에 하나씩 차곡차곡 쌓이고, 제일 위에 위치하는 실행 컨텍스트가 현재 실행되고 있는 컨텍스트이다
ECMA의 실행 컨텍스트 생성 : "현재 실행되는 컨텍스트에서 이 컨텍스트와 관련 없는 실행 코드가 실행되면, 새로운 컨텍스트가 생성되어 스택에 들어가고 제어권이 그 컨텍스트로 이동한다"
// 1. [ ] --> 전역 컨텍스트 실행 --> [전역컨텍스트]
console.log("This is global context");
function ExContext1() {
console.log("This is ExContext1");
} // 4. [전역컨텍스트 - ExContext2 - ExContext1] --> ExContext1 종료 --> [전역컨텍스트 - ExContext2]
function ExContext2() {
ExContext1(); // 3. [전역컨텍스트 - ExContext2] --> ((ExContext1 호출)) --> [전역컨텍스트 - ExContext2 - ExContext1]
console.log("This is ExContext2");
} // 5. [전역컨텍스트 - ExContext2] --> ExContext2 종료 --> [전역컨텍스트]
ExContext2(); // 2. [전역컨텍스트] --> ((ExContext2 호출)) --> [전역컨텍스트 - ExContext2]
// 6. [전역컨텍스트] --> 전역 컨텍스트의 실행 완료 --> [ ]
전역 실행 컨텍스트가 먼저 실행되고 새로운 함수 호출이 발생하면 새로운 컨텍스트가 만들어지고 실행되며, 종료되면 반환된다
이와 같은 과정이 반복된 후, 전역 실행 컨텍스트의 실행이 완료되면 모든 실행이 끝난다
출처: 송형주, 고현준 저, 『인사이드 자바스크립트』, 한빛미디어(2014)