23장. 실행 컨텍스트
0. 소스코드
구분하는 이유 : 소스코드 타입에 따라 실행 컨텍스트 생성/관리 내용이 다르므로
** 소스코드 구분
1) 전역 코드 : 최상위 스코프인 전역 스코프 생성, 전역 코드 평가시에 전역 실행 컨텍스트 생성
2) 함수 코드 : 지역 스코프 생성, 전역 스코프에서 시작하는 스코프 체인의 일원으로 연결, 함수 코드 평가시에 함수 실행 컨텍스트 생성
3) eval 코드 : strict mode에서 독자적인 스코프 생성, eval 코드 평가시에 eval 실행 컨텍스트 생성
4) 모듈 코드 : 모듈별로 독립적인 모듈 스코프 생성 , 모듈 코드 평가시에 모듈 실행 컨텍스트 생성
** 소스코드 평가
실행 컨텍스트 생성, 변수 / 함수등의 선언문만 먼저 실행하여 생성된 변수나 함수 식별자를 키로 실행 컨텍스트가 관리하는 스코프에 등록
1. 실행 컨텍스트 역할
1) 전역 코드 평가 : 선언문만 먼저 실행
2) 전역 코드 실행 : 값이 할당되고, 함수 호출
3) 함수 코드 평가
4) 함수 코드 실행
-> 실행 컨텍스트 : 이 모든 것을 관리(소스코드 실행하는 데 필요한 환경을 제공하고, 코드의 실행 결과를 실제로 관리)
+ 실행 컨텍스트 스택 : 코드의 실행 순서 관리
2. 렉시컬 환경
식별자와 식별자에 바인딩 된 값, 상위 스코프에 대한 참조를 기록하는 자료구조, 실행 컨텍스트를 구성하는 컴포넌트
스코프와 식별자를 관리함.
키와 값을 갖는 객체 형태의 스코프 생성하여, 식별자를 키로 등록하고, 식별자에 바인딩 된 값을 관리.
** 렉시컬 환경을 구성하는 컴포넌트
1) 환경 레코드 : 식별자를 등록하고, 바인딩 된 값을 관리하는 저장소
2) 외부 렉시컬 환경에 대한 참조 : 상위 스코프를 가리킴.(상위 코드의 렉시컬 환경)
3. 실행 컨텍스트 생성과 식별자 검색
1) 전역 객체 생성
2) 전역 코드 평가
* 평가 순서
1. 전역 실행 컨텍스트 생성
2. 전역 렉시컬 환경 생성
1) 전역 환경 레코드 생성
1.1) 객체 환경 레코드 생성
1.2) 선언적 환경 레코드 생성
2) this 바인딩
3) 외부 렉시컬 환경에 대한 참조 결정
3) 전역 코드 실행
4) 함수 코드 평가
* 평가 순서
1. 함수 실행 컨텍스트 생성
2. 함수 렉시컬 환경 생성
1) 함수 환경 레코드 생성
2) this 바인딩
3) 외부 렉시컬 환경에 대한 참조 결정
5) 함수 코드 실행
6) 함수 코드 실행 종료
7) 전역 코드 실행 종료