해당 내용은 '코어 자바스크립트' 서적을 참고하여 작성되었으며, 초보 개발자에게 유익한 책을 지필해주신 지은이 정재남 님께 감사의 말씀을 드립니다.
1번 상황은 자동으로 구성되고, 2번 같은 경우는 특수한 상황이기에
개발자가 실행컨택스트를 구성하는 대부분의 경우는 3번이다.
stack vs queue
자료구조의 기본적인 두가지 종류인데 간단하게 말하자면
stack: Last In First Out (마지막에 입력된 내용이 먼저 실행)
queue: First In First Out (처음에 입력된 내용이 먼저 실행)
이 두개념을 가지고도 설명하는 블로깅이 굉장히 많아 쉽게 확인하고 이해할 수 있을 것이라 생각한다
// 1. 코드가 시작할 때에 전역컨택스트가 자동으로 구성된다
var a = 1;
function outer(){ // outer 함수 정의
function inner(){ // inner 함수 정의
console.log(a); // undefined
var a = 2
}
inner(); // 3. outer 실행컨택스트 내에도 함수 실행 명령어가 있어 또다른 실행컨택스트가 구성된다(inner)
console.log(a); // 1
}
outer(); // 2. 함수가 실행되었을 때 실행컨택스트가 구성된다(outer)
console.log(a); // 1
var
변수와 console.log
내용에 대해서는 이후 호이스팅 개념과 연결해야 명확하게 설명할 수 있다.앞서 실행컨택스트의 개념에서 객체 라고 명시했다. 이는 개발자가 코드로 확인할 수 없지만 어떤 정보들이 쌓인다는 의미라는 것을 알 수 있다.
Variable Enviroment
현재 컨택스트 내의 식별자에 대한 정보(enviromentRecord)
+ 외부 환경 정보(값, 주소 혹은 데이터)(outerEnviromentReference)
선언 시점의 Lexical Enviroment 의 스냅샷으로, 변경 사항은 반영되지 않음.
Lexical Enviroment
실행컨택스트를 생성할 때에는 Variable Enviroment 에 정보를 먼저 담은 다음,
이를 그대로 복사해서 Lexical Enviroment 를 만들고, 이후에는 Lexical Enviroment 를 주로 활용한다. 변경 사항이 실시간으로 반연됨
This Binding
this 식별자가 바라봐야할 대상 객체