실행 컨텍스트란 실행 가능한 코드를 형상화하고 추상적인 개념이며
실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경이라고 한다.
자바스크립트 엔진에서 코드를 실행하기 위해서는 실행에 필요한 정보를 알고 있어야 한다.
var x = 'xxx';
function foo () {
var y = 'yyy';
function bar () {
var z = 'zzz';
console.log(x + y + z);
}
bar();
}
foo();
위 코드를 실행하면 아래와 같이 실행 컨텍스트 스택(Stack)이 생성하고 소멸한다.
실행 컨텍스트가 생성되면 자바스크립트 엔진은 실행에 필요한 여러 정보들을 담을 객체를 생성한다. 이를 Variable Object(VO / 변수 객체)라고 한다. Variable Object는 코드가 실행될 때 엔진에 의해 참조되며 코드에서는 접근할 수 없다.
Variable Object가 정보를 담는 객체
- 변수
- 매개변수(Parameter)와 인수 정보(Arguments)
- 함수 선언 (함수 표현식은 제외)
스코프 체인(Scope Chain)은 리스트라고 생각하면 된다.
전역 객체와 함수의 스코프의 레퍼런스를 저장하고 있다.
스코프 체인은 실행 컨텍스트가 참조할 수 있는 변수, 함수 선언 등의 정보를 담고 있는 리스트를 가르킨다.
this 프로퍼티는 this 값이 할당되는데 할당되는 값은
this의 5가지(global, functionInvocation, (call,apply,bind), Construction, MethodInvocation)패턴으로 결정된다.