실행 컨텍스트
소스 코드의 4가지 타입
- 소스 코드를 4가지로 구분하는 이유: 소스 코드 타입에 따라 실행 컨텍스트를 생성하는 과정과 관리가 다르기 때문이다.
- 전역 코드: 전역에 존재하는 소스코드, 전역에 정의된 함수, 클래스 등의 내부 코드는 포함 X, 전역 실행 컨텍스트 생성
- 함수 코드: 함수 내부에 존재하는 소스코드, 함수 내부에 중첩된 함수, 클래스 등의 내부 코드 포함 X, 함수 실행 컨텍스트 생성
- eval 코드: 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드, eval 실행 컨텍스트 생성
- 모듈 코드: 모듈 내부에 존재하는 소스코드, 모듈 내부의 함수, 클래스 등의 내부 코드는 포함 X, 모듈 실행 컨텍스트 생성
소스 코드의 평가, 실행
- JS 엔진은 평가와 실행 단계를 거쳐 소스코드 처리
- 소스 코드 평가: 실행 컨텍스트 생성, 변수와 함수 등의 선언문 선실행, 생성된 변수 혹은 함수 식별자를 키로 실행 컨텍스트가 관리하는 스코프에 등록 (런타임 이전)
- 소스 코드 실행: 선언문을 제외한 소스코드 순차적 실행(런타임), 소스 코드 실행에 필요한 변수나 함수의 참조를 실행 컨텍스트가 관리하는 스코프에서 검색하여 취득
실행 컨텍스트
- 소스 코드를 실행하는 데 필요한 환경 제공, 실행 결과 관리
- 식별자(변수명, 함수명, 클래스명)을 등록하고 관리하는 스코프와 코드 실행 순서 관리를 구현한 내부 메커니즘
- 모든 코드는 실행 컨텍스트를 통해 실행 및 관리
- JS에서 실행 컨택스트는 스택 형태로 관리, 코드의 실행 순서 관리
- 현재 실행중인 코드의 실행 컨텍스트는 실행 컨텍스트 스택 최상위에 존재하는 실행 컨텍스트
렉시컬 환경
- 식별자와 식별자에 바인딩된 값, 상위 스코프에 대한 참조를 기록하는 자료구조
- 실행 컨텍스트가 코드의 실행 순서를 관리한다면 렉시컬 환경은 스코프와 식별자 관리
- 환경 레코드(Environment Record), 외부 렉시컬 환경 참조(Outer Lexical Environment Record)
- 환경 레코드: 스코프에 포함된 식별자 등록, 등록된 식별자에 바인딩된 값을 관리하는 저장소
- 외부 렉시컬 환경 참조: 상위 스코프 참조, 이때 상위 스코프는 외부 렉시컬 환경, 즉 해당 실행 컨텍스트를 생성한 소스 코드를 포함하는 상위 코드의 렉시컬 환경을 가리킨다.(단방향 링크드 리스트인 스코프 체인)
- 전역 렉시컬 환경의 외부 렉시컬 환경 참조의 경우
null
이 할당
전역 렉시컬 환경
- 전역 렉시컬 환경의 환경 레코드는 객체 환경 레코드 와 선언적 환경 레코드 로 구분
- 객체 환경 레코드: var 키워드 전역 변수, 함수 선언문으로 정의한 전역 함수, 빌트인 전역 프로퍼티와 빌트인 전역 함수, 표준 빌트인 객체 관리
- 선언적 환경 레코드: let, const 키워드 전역 변수 관리
'JavaScript' 카테고리의 다른 글
[DeepDive] - 26장(ES6 함수의 추가기능) 필요 내용 정리 (0) | 2022.06.27 |
---|---|
[DeepDive] - 25장(클래스) 필요 내용 정리 (0) | 2022.06.24 |
[DeepDive] - 20장(strict mode), 21장(빌트인 객체) 필요 내용 정리 (0) | 2022.06.14 |
[DeepDive] - 17장(생성자 함수에 의한 객체 생성) 필요 내용 정리 (0) | 2022.06.09 |
[DeepDive] - 15장(let, const 키워드와 블록 레벨 스코프), 16장(프로퍼티 어튜리뷰트) 필요 내용 정리 (0) | 2022.06.08 |