JS
실행 컨텍스트
namu445
2022. 5. 10. 20:26
활성화된 실행 컨텍스트의 수집 정보
- Variable Environment
- Lexical Environment
- ThisBinding
Variable Environment
- 최초 실행 시 Variable Environment에 담기는 내용은 Lexical Environment와 같다. 실행 컨텍스트를 생성할 때 Variable Environment에 환경 정보를 담고 그대로 복사해서 Lexical Environment를 만든다. 이후에는 Lexical Environment를 주로 사용한다. Variable Environment의 내용은 변하지 않는다.
Lexical Environment
- Variable Environment를 그대로 복사해서 생성되며 환경 변경 사항이 실시간으로 반영된다.
- Variable Environment와 Lexical Environment의 내부는 environmentRecord와 outer-EnvironmentReference로 구성되어 있다.
- 스코프는 함수나 블럭(const let 으로 선언된{})단위로 구분된다.
- environmentRecord
- 현재 실행중인 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다.
- 함수에 지정된 매개변수, 선언한 함수, 선언된 변수
- 컨텍스트 내부 전체를 처음부터 끝까지 쭉 순서대로 수집한다. -> 호이스팅
- 이 과정에서 컨텍스트 내에 어떤 식별자들이 있는지만 확인한다. (함수(선언문)는 전체를 호이스팅 한다)
- 식별된 변수에 값을 할당하는 과정은 라인 순서대로 진행한다.
- 현재 실행중인 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다.
- outer Environment Reference
- 한단계 외부의 Lexical Environment를 참조한다. -> 스코프 체인
- environmentRecord
ThisBinding
- this 식별자가 바라봐야 할 대상 객체
호이스팅으로 인한 에러( 중복 변수)를 방지하기 위해서 const와 let만 사용할 것