실행 컨텍스트는 다음과 같은 것들을 이용하면 call stack에 쌓이게 됩니다.
전역공간
함수
를 실행eval()
함수 실행block
을 만듦일반적으로 함수를 이용한 실행 컨텍스트를 사용합니다.
// var
var a = 1; // 전역 컨텍스트
function outer() { // outer 컨텍스트
function inner() { // inner 컨텍스트
console.log(a); // undefined
var a = 3;
console.log(a); // 3
};
inner();
console.log(a); // 1
};
outer();
console.log(a); // 1
// let -> 에러? TDZ(일시적 사각지대) 구간에 빠지는 것 같음.
// inner 스코프 내에서 a의 선언이 있기 때문에 전역에 있는 a를 참조하지 못함
// 스코프의 시작 지점부터 초기화 시작 지점까지의 구간을 TDZ(Temporal Dead Zone)라고합니다.
let a = 1;
function outer() { // outer 컨텍스트
function inner() { // inner 컨텍스트
console.log(a);
let a = 3;
console.log(a);
};
inner();
console.log(a);
};
outer();
console.log(a);
위의 코드를 실행했을 때 실행 컨텍스트의 스택은 다음과 같은 순서로 실행됩니다.
[전역 컨텍스트]
[전역 컨텍스트, outer]
[전역 컨텍스트, outer, inner]
[전역 컨텍스트, outer]
[전역 컨텍스트]
그리고 이러한 실행 컨텍스트를 구성할 때 생기는 것들이 있습니다.
VariableEnvironment