출처: 모던 자바스크립트 딥다이브
371pg. 객체 환경 레코드생성
373pg. this 바인딩
실행 컨텍스트 예시동작 전부
| 소스코드 타입 | 설명 |
|---|---|
| 전역 코드 | 전역에 존재하는 소스코드, 전역에 정의된 함수. 클래스 등의 내부 코드는 포함 되지 않는다. |
| 함수 코드 | 함수 내부에 존재하는 소스코드. 함수 내부에 중첩된 함수. 클래스 등의 내부 코드는 포함 하지않는다. |
| eval 코드 | 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행 되는 소스코드 |
| 모듈 코드 | 모듈 내부에 존재하는 소스코드. 모듈 내부의 함수. 클래스 등의 내부 코드는 포함 되지 않는다. |
소스코드를 구분한 이유: 소스코드의 타입에 따라 실행 컨텍스트 생성하는 과정과 내용이 다름
전역코드 → 최상위 전역 스코프를 생성, 또한 var 변수, 함수 선언문으로 정의한 함수를 전역 객체의 프로퍼티와 메서드로 바인딩후 참조하기 위해 전역 객채와 연결한다. 이를 위해 전역 코드가 평가되면 전역 실행 컨텍스트가 생성됨
함수코드 → 함수 코드는 지역 스코프를 생성 후 지역 변수, 매개변수, arguments 객체를 관리해야함 생성한 지역 스코프를 전역 스코프에서 시작하는 스코프 체인의 일원으로 연결해야함. 이를 위해 함수코드가 평가되면 함수 실행 컨텍스트가 생성됨
eval코드 → strict mode 에서 자신만의 독자적인 스코프를 생성함. 이를 위해 eval 코드가 평가되면 eval 실행 컨텍스트가 생성됨
모듈코드 → 모듈별로 독립적인 모듈 스코프를 생성함. 이를 위해 모듈 코드가 평가되면 모듈 실행 컨텍스트가 생성됨
!* 모든 소스코드는 평가후 실행 컨텍스트를 생성함