실행 컨텍스트는 실행할 코드에 제공할 환경 정보를 모아놓은 객체입니다.
스택은 출입구가 하나뿐인 우물 같은 데이터 구조입니다. 스택에 저장되는 데이터는 후입선출로 통과합니다.
큐는 출입구가 2개인 데이터 구조입니다. 큐에 저정되는 데이터는 선입선출로 통과합니다.
실행 컨텍스트는 스택구조로 저장됩니다. 이를 콜 스택이라고 합니다.
각각의 실행 컨텍스트를 구성하는 방법으로는 전역공간, 함수 등이 있습니다. 전역공간의 환경 정보를 큐의 가장 아래 부분에 쌓습니다. 그리고 생성되는 함수의 환경 정보를 스택 구조로 쌓아 올립니다. 그리고 소멸될때도 마찬가지로 스택 구조로 소멸됩니다.
실행 컨텍스트를 구성하는 요소는 크게 3가지가 있습니다.
VariableEnvironment는 최초 실행 시의 스냅샷을 유지합니다. 내부는 LexicalEnvironment와 같은 environmentRecord와 outerEnvironmentReference로 구성되어 있습니다.
LexicalEnvironment는 실행 컨텍스트 최초 실행시의 스냅샷인 VariableEnvironment에서 변경되는 사항을 반영합니다. 구조는 마찬가지로 environmentRecord와 outerEnvironmentReference로 구성되어 있습니다.
environmentRecord에는 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장됩니다. 식별자 정보는 매개변수 식별자, 변수 식별자, 함수 선언문 등이 있습니다.
호이스팅은 식별자 정보들이 environmentRecord에 저장되는 것을 말합니다. 코드가 실행되기 전에 식별자들이 environmentRecord에 저장되기 때문에 마치 코드의 최상단으로 끌어 올려진것 같아서 호이스팅됬다고 합니다.
이때 주의할 점은 식별자만 environmentRecord에 저장된다는 것입니다. 선언부만 저장되고 할당 부분은 저장되지 않습니다.