Modern JavaScript Deep Dive 스터디 - CH23 실행 컨텍스트
참고 자료: ⟪모던 자바스크립트 Deep Dive⟫"(이웅모 지음,위키북스, 2020)
- 전역에 존재하는 소스코드
- 전역에 정의된 함수, 클래스 등의 내부 코드는 포함되지 않음
var 키워드로 선언된 전역 변수
와 함수 선언문으로 정의된 전역 함수
를 전역 객체와 연결 (전역 객체의 프로퍼티와 메서드로 바인딩 하고 참조하기 위해)
- 함수내부에 존재하는 소스코드
- 함수 내부에 중첩된 함수, 클래스 등의 내부 코드는 포함되지 않음
지역 변수
, 매개 변수
, arguments 객체
를 관리
- 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드
- 모듈 내부에 존재하는 소스코드
- 모듈 내부의 함수, 클래스 등의 내부 코드는 포함되지 않음
소스코드의 평가
와 소스코드 실행
단계의 과정으로 나누어 처리실행 컨텍스트
- 선언에 의해 생성된 모든 식별자를 스코프를 구분하여 등록하고 상태 변화를 지속적으로 관리
- 스코프 체인을 통해 상위 스코프로 이동하며 식별자를 검색
- 현재 실행 중인 코드의 실행 순서를 변경(함수 호출에 의해 순서 변경)할 수 있어야 하며 다시 돌아갈 수 있게 해야한다.
실행 컨텍스트
- 소스코드를 실행하는 데 필요한 환경을 제공
- 코드의 실행 결과를 실제로 관리하는 영역
- (식별자와 스코프는 실행 컨텍스트의 렉시컬 환경으로 관리)
- 식별자(변수, 함수, 클래스 등의 이름)를 등록하고 관리하는 스코프
- 실행 순서 관리를 구현한 내부 메커니즘
- 모든 코드는 실행 켄텍스트를 통해 실행되고 관리
실행 중인 실행 컨텍스트
라 부른다자바스크립트 엔진 =>
- 전역 코드를 평가 ->
전역 실행 컨텍스트
를 생성- 함수가 호출되면 -> 함수 코드를 평가 ->
함수 실행 컨텍스트
를 생성
실행 컨텍스트 스택
: 코드 실행 순서를 관리렉시컬 환경
: 식별자와 스코프를 관리
실행 컨택스트의 구성 요소
Lexical Environment
컴포넌트와Variable Environment
컴포넌트로 구성- 생성 초기에
Lexical Environment
컴포넌트와Variable Environment
컴포넌트는 하나의 동일한 렉시컬 환경을 참조- 이후 몇 가지 상황을 만나면
Variable Environment
컴포넌트를 위한 새로운 렉시컬 환경을 생성- 이때부터
Lexical Environment
컴포넌트와Variable Environment
컴포넌트는 내용이 달라지는 경우가 있음
렉시컬 환경의 구성 요소
Environment Record(환경 레코드)
와OuterLexicalEnvionmentReference(외부 렉시컬 환경에 대한 참조)
컴포넌트로 구성Environment Record(환경 레코드)
: 스코프에 포함된 식별자를 등록하고 등록된 식별자에 바인딩된 값을 관리하는 저장소OuterLexicalEnvionmentReference(외부 렉시컬 환경에 대한 참조)
: 상위 스코프를 가리킴. (이때 상위 스코프란 외부 렉시컬 환경, 즉 해당 실행 컨텍스트를 생성한 소스코드를 포함하는 상위 코드의 렉시컬 환경을 말함)
① 전역 실행 컨텍스트 실행
② 전역 렉시컬 환경 생성
전역 환경 레코드 생성
선언적 환경 레코드 생성
this바인딩
외부 렉시컬 환경에 대한 참조
var 키워드로 선언한 변수
: 함수의 코드 블록만 지역 스코프로 인정하는 함수 레벨 스코프
를 따름let, const 키워드로 선언한 변수
: 모든 코드 블록을 지역 스코프로 인정하는 블록 레벨 스코프
를 따름