실행 컨텍스트는 자바스크립트의 실행 컨텍스트는 실행할 코드에 제공할
환경 정보들을 모아놓은 객체이다.
context의 사전적 의미는
1. (어떤 일 또는 글의) 맥락, 전후 사정
실행컨텍스트의 하위 개념에는 스코프, 변수, 객체, 호이스팅이라는게 있다.
자바스크립트는 어떤 실행 컨텍스트가 활성화되는 시점에 다음과 같을 일을 한다.
1. 선언된 변수를 위로 끌어올린다 = 호이스팅 (hoisting)
2. 외부 환경 정보를 구성
3. this값을 설정
즉 동일 환경에 있는 코드를 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고 이것을 콜스택에 쌓아올린다.
가장 위에 쌓여있는 컨텍스트와 관련된 코드를 실행하는 방법으로
코드의 환경 및 순서를 보장할 수 있다.
eval() 함수: 일부 프로그래밍 언어들에서 지원하는 함수의 일종.
문자열로 된 표현식을 받아 코드로 해석하여 실행하는 역할을 한다.
evaluate의 약자로, 문자열이 코드라고 가정하고 평가해서 실행한다는 뜻
VariableEnvironment와 동일하지만 변경사항을 실시간으로 반영
record 에 식별자 정보들이 저장(수집)된다.
- 수집 대상 정보: 함수에 지정된 매개변수 식별자, 함수 자체, var로 선언된 변수 식별자 등
- 컨텍스 내부를 처음부터 끝까지 순서대로 훑어가며 수집(실행X)
호이스팅: 변수 정보 수집을 모두 마쳤더라도 아직 실행 컨텍스트가 관여할 코드는 실행 전의 상태(JS 엔진은 코드 실행 전 이미 모든 변수 정부를 알고있는 것)
호이스팅 예시

호이스팅 풀이

변수의 선언부 (식별자 정보), 함수 선언은 함수 전체를 호이스팅해준다.
VE와 LE는 똑같다 담기는 항목은 완벽하게 동일하다.
둘 다 레코드와 아우터를 가지고 있다.
둘의 차이점은 변경사항을 실시간으로 반영하느냐, 반영하지 않느냐의 차이가 있다.
[스냅샷 유지여부]
1. VE: 스냅샷 유지
2. LE: 스냅샷을 유지하지 않는다. 즉 실시간으로 변경사항을 반영
결국, 실행 컨텍스트를 생성할 때, VE에 정보를 먼저 담은 다음,
이를 복사해서 LE를 만들고, 이후에는 주로 LE를 활용
이렇게 자바스크립트의 실행 순서? 실행 컨텍스를 알아보았다.
여러번 듣고 정리하니 숙지가 되는 것 같다!