- 실행 컨텍스트 (Execution Context) : 실행할 코드에 제공할 환경 정보들을 모아놓은 객체
자바스크립트는 실행 컨텍스트가 활성화되는 시점에 다음과 같은 현상이 발생한다.
- 호이스팅 발생 (호이스팅이 궁금하다면 보러 가기)
- 외부 환경 정보를 구성
- this 값을 설정
실행 컨텍스트를 Call Stack에 쌓는 경우는 아래와 같다.
1. 전역 코드 : 전역 영역에 존재하는 코드
2. Eval 코드 : eval 함수로 실행되는 코드 (eval은 현재는 안 쓰는 것을 권장하며, 오히려 evil이라는 소리를 들음)
3. 함수 코드 : 함수 내에 존재하는 코드
4. 블록 문 : { } 안에 있는 코드 (ES6 이후)
- 실행 컨텍스트 구성
- Variable Environment : 현재 컨텍스트 내의 식별자(변수)들의 정보와 외부 환경 정보가 들어있음. environmentRecord와 outerEnvironmentReference로 구성되어 있으며, 최초 실행 시의 스냅샷(상태)를 유지한다.
실행 컨텍스트를 생성할 때 Variable Environment에 정보를 먼저 담은 다음, 이를 복사해서 Lexical Environment를 만들고 변경 사항이 반영되지 않는다.
- Lexical Environment : environmentRecord와 outerEnvironmentReference로 구성되어 있고 처음에는 Variable Environment과 같지만 변경 사항이 실시간으로 반영된다.
- thisBinding : this 식별자가 바라보고 있는 대상 객체
- environmentRecord : 컨텍스트와 관련된 코드의 식별자 정보들(매개변수 식별자, 함수 자체, 함수 내부의 식별자)이 저장되고 그로 인해 호이스팅 발생
- outerEnvironmentReference : 현재 호출된 함수가 선언될 당시의 Lexical Environment를 참조하는 포인터로 그로 인해 스코프와 스코프 체인이 형성된다.
'개발에 도움이 되는 > JavaScript' 카테고리의 다른 글
클로저(Closure) (0) | 2022.03.13 |
---|---|
스코프(Scope) (0) | 2022.02.27 |
호이스팅(Hoisting) (1) | 2022.01.05 |
Node.js (0) | 2022.01.03 |
JavaScript (0) | 2021.12.26 |