출처 : https://gohighbrow.com/stacks-and-queues/
실행할 코드에 제공할 환경 정보들을 모아놓은 객체다. 하나의 실행 컨텍스트를 구성하는 방법으로는 전역공간, eval()함수, 함수 등이 있다. 컨텍스트를 구성하면 콜 스택에 쌓아 올려서 가장 위에 있는 컨텍스트와 관련 있는 코드를 실행해 전체 코드의 환경과 순서를 보장한다. 실행 컨텍스트는 세 가지 정보를 수집한다.
VariableEnvironment
LexicalEnvironment
ThisBinding
자바스크립트 엔진은 식별자들을 최상단으로 끌어올려놓은 다음 실제 코드를 실행한다. 함수를 실행하는 순간 함수의 실행 컨텍스트가 생성되고, 이 때 변수명과 함수 선언의 정보를 위로 끌어올린다. 변수는 선언부만 끌어올리고, 함수 선언은 전체를 끌어올린다. 변수의 할당부는 원래 자리에 남겨둔다.
function a(){ }
a();
var b = function (){ }
b();
함수 선언문은 전체를 호이스팅하고 함수 표현식은 변수 선언부만 호이스팅한다. 따라서 함수 선언문을 사용하게 되면 동일한 변수명에 서로 다른 값을 할당할 경우 나중 값이 이전 값을 덮어 씌운다. 따라서 협업을 위해 상대적으로 함수 표현식이 안전하다.
여러 스코프에서 동일한 식별자 선언한 경우 스코프 체인 상에서 가장 먼저 발견된 식별자에만 접근 가능하게 한다. 따라서 규모가 작을수록 스코프 체인을 타고 접근 가능한 변수는 늘어난다.
실행 컨텍스트를 활성화할 때 지정된 this가 저장된다. 함수를 호출하는 방법에 따라 값이 달라지고, 지정되지 않으면 전역객체가 저장된다.