-
[ JS ] Execution Context 실행 컨텍스트Javascript 2023. 11. 21. 20:45
실행 컨텍스트란 ?
실행 컨텍스트란 실행할 코드의 식별자, 스코프 등의 환경 정보를 관리한다.
컨텍스트를 콜스택에 쌓아올린 후 실행하여 코드의 환경과 실행 순서를 보장한다.실행 컨텍스트는 호이스팅, 스코프 체인, 클로저, this binding 등 JS 중요 개념의 근간이 된다.
실행 컨텍스트 구성도
빨간 글씨는 해당 concept과 관련있는 개념을 표기함
Execution Context 실행 컨텍스트
역할 : 실행 컨텍스트는 실행할 코드의 변수와 스코프 같은 환경정보와 외부 참조 정보를 가지고 있다.
콜스택에 쌓이며 실행 순서를 보장한다. 콜스택의 최상단에 위치한 실행 컨텍스트는 running execution context이다.
구성 : Lexical Environment, Variable Environment
특징 : 실행 컨텍스트 생성 초기에는 Lexical Environment와 Variable Environment는 같은 환경을 참조한다.
이후 실행 컨텍스트의 환경이 변경되면, Lexical Environment의 정보는 갱신이 되지만 Variable Environment의 정보는 갱신되지 않는다.
즉, 초기에 Lexical Environment와 Variable Environment는 같은 정보를 가지고 있지만
이후 정보 갱신은 Lexical Environment에서만 적용된다.
Lexical Environment
생성 시점 : 함수의 Lexical Enviornment는 실행 컨텍스트가 생성된 직후 함께 만들어진다.
역할 : 코드의 식별자와 스코프 관리 및 외부 참조 역할
구성 : Environment Record와 Outer Lexical Environment Reference로 구성되어 있다.
- Environment Record : 현재 컨텍스트 내에서 선언된 변수와 함수 식별자 정보를 저장하고 등록된 식별자에 바인딩된 값을 관리한다.
- Outer Lexical Environment Reference : 외부 Lexical Environment를 참조한다. 스코프 체인을 형성하는데 사용된다.
연결 개념
- 클로저 : Lexical Environment의 생성 시점은 함수 생성 시점이라는 점을 이용하여 클로저 함수를 구현할 수 있다.
- 스코프 체인 : Outer Lexical Environment Reference에서 외부 Lexical Environment를 참조하는 것에서 파생되는 개념이다.
- 호이스팅 : JS Engine은 런타임 이전에 스코프 내의 선언문을 읽고 Lexical Environment에 변수 등록을 합니다.
Environment Record
- Declarative Environment Record : function, 변수, catch문 그리고 전역에서 let과 const로 선언한 변수
- Function Environment Record : this binding, 함수의 지역 변수와 매개변수 그리고 내부에 선언된 함수 정보 저장
- Module Environment Record
- Object Environment Record : 글로벌 함수와 변수, with문에서 사용
- Global Environment Record : 이론상 하나의 레코드지만, 실제로는 Declarative Environment Record와 Object Environment Record 복합체로 명시
Reference
자바스크립트 함수 (3) - Lexical Environment
지난 글을 통해 함수의 생성과 함수의 호출 과정에 대해 간략히 알아보았다. 앞선 글(함수의 호출)에서 간단히 설명한 Execution Context에는 LexicalEnvironment와 VariableEnvironment라는 컴포넌트가 있다. 기
ui.toast.com
'Javascript' 카테고리의 다른 글
[ JS ] 호이스팅 (0) 2023.11.17 [ JS ] Promise (0) 2023.06.13