추상적인 개념
실행할 코드에 제공할 환경 정보들을 모아놓은 객체
Stack
에서는 가장 마지막에 들어온 d,c,b,a 순으로 데이터를 꺼낼 수 있습니다.
Queue
에서는 제일 먼저 들어온 a,b,c,d 순으로 데이터를 꺼낼 수 있습니다.
실행 컨택스트의 동작은, 동일한 환경에 있는 코드들을 실행할 때 필요한 환경정보를 모아 컨텍스트를 구성하고,
이를 콜 스택에 쌓아놓은 뒤, 가장 위에 있는 컨텍스트와 관련 있는 코드들을 실행하는 것으로 코드의 환경과 순서를 보장합니다.
// ------------------- (1)
var a = 1;
function outer() {
function inner() {
console.log(a);
var a = 3;
// --------------- (2)
}
inner(); // -------- (3)
console.log(a);
// ----------------- (4)
}
outer(); // ---------- (5)
console.log(a);
// ------------------- (6)
프로그램 실행: [전역 컨텍스트]
outer 실행: [전역 컨텍스트, outer] -> (5)
inner 실행: [전역 컨텍스트, outer, inner]-> (3)
inner 종료: [전역 컨텍스트, outer] -> (2)
outer 종료: [전역 컨텍스트] -> (4)
프로그램 종료
VariableEnvironment
, LexicalEnviornment
, ThisBinding
세 가지 정보 수집합니다.실행 컨텍스트를 생성할 때, VariableEnvironment에 정보를 먼저 담은 후 이를 그대로 복사해서 LexicalEnvironment를 만들고
이후에 LexicalEnvironment를 주로 활용하게 됩니다. 실행중에도 변경사항이 반영되지 않으며 초기 상태를 유지합니다.
내부 구성 요소
LexicalEnvironment의 내부에는 environmentRecord와 outerEnvironmentReference로 구성되어 있습니다.
environmentRecord로 인하여 호이스팅이 발생
outerEnvironmentReference로 인하여 스코프와 스코프체인이 형성