실행 컨텍스트 란?
실행 컨텍스트란 실행할 코드에 제공할 환경 정보들을 모아놓은 객체이다.
자바스크립는 동일한 환경에 있는 환경 정보들을 모은 실행 컨텍스트를 콜스택에 쌓아 올린 후 실행하여 코드의 환경과 순서를 보장할수 있게 되어있다. (여기서 환경은 전역 공간이 될수도 있고 함수 즉 함수 내부의 환경이 될 수 있다.)

1) 전역 컨텍스트를 제외하곤 다른 컨테스트가 없기에 전역 컨테스트와 관련된 코드를 진행한다.
2) 전역 컨텍스와 관련된 코드를 진행 중 a함수를 실행하였기에 a함수의 환경 정보들을 수집하고 a실행 컨텍스트를 생성 후 기억한다.
3) a 함수 내부에서 b 함수를 실행하였기에 b 함수의 환경 정보들을 수집 후, 실행 컨텍스트를 생성 하여 기억한다. 최상단에 b 실행 컨텍스트가 있기에 기존 a 실행 컨텍스트와 관련된 코드의 실행을 일시적 중단한다.
4) b함수가 종료된 후 b컨테스트 제거된다.
5) 제거 후 최상단에는 a실행 컨텍스트가 있기 때문 이전에 중단된 지점부터 코드 진행이 재개된다.
6) a함수 또한 종료 후 실행 컨텍스트가 제거된다.
실행 컨텍스트 속엔 어떤 정보가?
실행 컨텍스트 내부엔 variable environment, lexical environment, this binding 가 있다.
VariableEnvironment
현재 컨텍스트 내부의 식별자 정보, 외부 환경 정보가 포함되어 있다
LexicalEnvironment
초기에는 VariableEnvironment 와 같지만 변경 사항이 실시간으로 적용된다. VariableEnvironment 초기 상태를 기억하고 있으며, LexicalEnvironment 최신 상태를 저장하고 있다.
선언하기도 전에 값을 호출하면 undefined (할당되지 않음) 만 출력된다. 이것은 자바스크립트의 호이스팅이라는 현상이다. ps. 호이스팅이란? : 실행 컨텍스트를 구성할 때 엔진은 함수를 실행하기도 전에 해당 컨텍스트 내부의 변수명들을 이미 알고있기 때문에 식별자들을 코드의 최상단으로 끌어올리는 것
ThisBinding
this 는 컨텍스트를 말한다. 함수표현식에서 사용시 this 를 바인딩하지 않는 이상 전역 객체를 가르킵니다..