자바스크립트 코드가 실행되는 환경을 일컫는다.
실행 컨텍스트에는 3가지가 존재한다.
1. Global 실행 컨텍스트
2. Functional 실행 컨텍스트
3. Eval 실행 컨텍스트
Global 실행 컨텍스트
Functional 실행 컨텍스트
undefined
를 의미하고 strict 모드가 아니면 window
객체를 가르킨다.Eval 실행 컨텍스트
스크립트의 모든 컨텍스트들이 LIFO 구조에 따라 쌓이는 스택 데이터 구조
❓ 실행 컨텍스트 스택과 콜 스택은 같은건가요?
📎 stack overflow 에 의하면 같은 거라고 한다.
자바스크립트 엔진은 실행 컨텍스트를 생성 할 때 2개의 단계를 밟는다.
1. 생성 단계 ( Creation Phase )
2. 실행 단계 ( Execution Phase )
__proto__
프로퍼티도 갖고 있지 않다.변수 객체와 활성 객체는 함수 컨텍스트에서는 같은 객체이다. 그러나 전역 스코프에서는 활성 객체라고 불리지 않는다. 변수 객체로 불린다.
this
를 결정한다.executionContextObj = {
variableObject: {}, // All the variable, arguments and inner function details of the funA
scopechain: [], // List of all the scopes inside which the current function is
this // Value of this
}
function funA (a, b) {
var c = 3;
var d = 2;
d = function() {
return a - b;
}
}
funA(3, 2);
이 함수의 실행 컨텍스트 객체의 변수 객체 프로퍼티는 이렇게 정의된다. ⬇️
executionContextObj = {
variableObject = {
argumentObject : {
0: a,
1: b,
length: 2
},
a: 3,
b: 2
c: undefined,
d: undefined then pointer to the function defintion of d
}, // All the variable, arguments and inner function details of the funA
scopechain: [executionFunction variable object, Global execution context variable object], // List of all the scopes inside which the current function is
this // Value of this
}
argumentObject 는 인자의 길이와 인자의 값이 아닌 이름을 값으로 갖는다.
그리고 함수 안의 선언된 변수들은 undefined
로 초기화 된다.
함수 내부의 선언된 함수 같은 경우에는 함수를 힙에 저장한 뒤, 함수의 이름을 변수 객체의 프로퍼티, 값은 힙에 저장된 곳을 가르킨다.
scope chain
같은 경우에는 현재 실행 중인 함수의 변수 객체와 전역 컨텍스트의 변수 객체를 담는다.
실행 단계에선 undefined로 초기화 되었던 값을 재할당하기 위해 다시 코드를 순회한다.
executionContextObj = {
variableObject = {
argumentObject : {
0: a,
1: b,
length: 2
},
a: 3,
b: 2,
c: 3,
d: undefined then pointer to the function defintion of d
}, // All the variable, arguments and inner function details of the funA
scopechain: [executionFunction variable object, Global execution context variable object], // List of all the scopes inside which the current function is
this // Value of this
}