실행컨텍스트(execution context)란 코드를 실행하는데 필요한 환경을 제공하는 객체
*환경: 코드 실행에 영향을 주는 조건이나 상태
📷 VariableEnvironment
현재 컨텍스트 내의 식별자들에 대한 정보, 외부 환경 정보가 담겨있음.
선언 시점의 LexicalEnvironment의 스냅샵으로 변경 사항은 반영되지 않음.
📺 LexicalEnvironment
처음에는 variableEnvironment와 같지만 변경 사항이 실시간으로 반영 됨.
- environmentRecord(환경 레코드): 함수 안의 코드가 실행되기 전에 현재 컨텍스트와 관련된 코드의 식별자 정보가 저장된다. (매개변수의 이름, 함수 선언, 변수명 등)
즉, 식별자와 식별자에 바인딩된 값을 기록 (호이스팅)- outerEnvironmentReference(외부 렉시컬 환경 참조): 상위 스코프를 가리킨다.
즉, 현재 environment record보다 바깥에 있는 environment record를 참고한다는 뜻이며 해당 실행 컨텍스트를 생성한 함수의 바깥 환경을 가리킨다.
따라서 자바스크립트 엔진이 현재 렉시컬 환경에서 변수를 찾을 수 없다면 외부 환경에서 찾는다는 것을 뜻한다.
만약 상위 스코프에서도 해당 식별자를 찾을 수 없다면 참조 에러(uncaught reference error)를 발생시킨다.
⛓ ThisBinding
this는 식별자가 바라봐야 할 대상 객체로 실행 컨텍스트가 활성될 때 this가 지정되지 않은 경우 this에는 전역 객체가 저장된다.