실행 컨텍스트 , Execution Context
ECMAScript 스펙
에 따르면 실행 컨텍스트는 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이라고 정의한다.
- 실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경이라는 뜻이다.
- 이 때 실행 가능한 코드는
전역 코드
, 함수 코드
, Eval 코드
를 말한다.
- 자바스크립트 엔진은 코드를 실행하기 위해 몇 가지 정보를 알고 있어야 한다.
- 변수 : 전역 변수, 지역 변수, 매개 변수, 객체의 프로퍼티
- 함수 선언
- 변수의 유효 범위(Scope)
- this
- 위의 정보들을 형상화하고 구분하기 위해 자바스크립트 엔진은 실행 컨텍스트를 물리적 객체의 형태로 관리한다.
var x = 'xxx';
function foo() {
var y = 'yyy';
function bar() {
var z = 'zzz';
console.log(x + y + z);
}
bar();
}
foo();
- 위 코드를 실행하면 아래와 같이 실행 컨텍스트(stack)이 생성되고 소멸된다.
- 현재 실행 중인 컨텍스트에서 이 컨텍스트와 관련 없는 코드(예를 들어 다른 함수)가 실행되면 새로운 컨텍스트가 생성된다.
- 이 컨텍스트는 스택에 쌓이게 되고 컨트롤(제어권)을 넘겨 받는다.

- 컨트롤이 실행 가능한 코드로 이동하면 논리적 스택 구조를 가지는 새로운 실행 컨텍스트 스택이 생성된다. 스택은 LIFO(후입 선출)이 구조를 가진다.
- 전역 코드로 컨트롤이 진입하면 전역 실행 컨텍스트가 생성되고 실행 컨텍스트 스택에 쌓인다. 전역 실행 컨텍스트는 어플리케이션이 종료될 때(웹 페이지에서 나가거나 브라우저를 닫을 때)까지 유지된다.
- 함수를 호출하면 해당 함수의 실행 컨텍스트가 생성되고 직전에 실행된 코드 블록의 실행 컨텍스트 위에 쌓인다.
- 함수 실행이 끝나면 해당 함수의 실행 컨텍스트를 파기하고 직전의 실행 컨텍스트에 컨트롤을 반환한다.
실행 컨텍스트의 3가지 객체