정의
🔈 자바스크립트의 동작 원리를 담고 있는 핵심 개념
실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경, 매커니즘.
실행 컨텍스트를 이해하면 다음과 같은 것을 알 수 있다고 한다.
- 스코프를 기반으로 식별자와 식별자에 바인딩된 값을 관리하는 방법
- 호이스팅이 발생하는 이유
- 클로저의 동작 방식
- 태스크 큐와 함께 동작하는 이벤트 핸들러
- 비동기 처리의 동작 방식
1 소스코드의 타입
💡 소스코드 (실행 가능한 코드 executable code)
- 전역 코드 : 전역에 존재하는 소스코드. 전역에 정의된 함수, 클래스 등의 내부코드는 포함 X
- 함수 코드 : 함수 내부에 존재하는 소스코드. 함수 내부에 중첩된 함수, 클래스 등의 내부 코드는 포함 X
- eval 코드 : 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드
- 모듈 코드 : 모듈 내부에 존재하는 소스코드. 모듈 내부 함수, 클래스 포함 X
소스코드를 굳이 타입으로 구분하는 이유 :
소스코드의 타입에 따라 실행 컨텍스트를 생성하는 과정과 관리 내용이 다르기 때문이다.
1 전역 코드
전역 코드가 평가되면 전역 실행 컨텍스트가 생성된다.
- 전역코드는 전역 스코프를 생성해야 한다. (전역 변수를 관리하기 위해)
- 또한 전역 객체와 연결되어야한다.
(var 키워드로 선언된 전역 변수와 함수 선언문으로 정의된 전역 함수를 전역 객체의 프로퍼티와 메서드로 바인딩하고 참조하기 위해)
2 함수 코드
함수 코드가 평가되면 함수 실행 컨텍스트가 생성된다.
- 함수 코드는 지역 스코프 생성, 지역 변수, 매개변수, arguments 객체를 관리해야한다.
- 생성한 지역 스코프를 전역 스코프에서 시작하는 스코프 체인의 일원으로 연결해야 한다.
3 eval 코드
eval 코드가 평가되면 eval 실행 컨텍스트가 생성된다.
- eval 코드는 strict mode에서 자신만의 독자적인 스코프를 생성한다.
4 모듈 코드
모듈 코드가 평가되면 모듈 실행 컨텍스트가 생성된다.
모듈 코드는 모듈별로 독립적인 모듈 스코프를 생성한다.
2 소스코드의 평가 / 실행
평가 - 실행 컨텍스트 생성, 변수, 함수 등의 선언문 실행, 생성된 변수, 함수 선언문을 키key로 스코프에 등록
실행 - 선언문을 제외한 소스코드가 순차적으로 실행 (런타임)
평가 단계와 실행 단계의 예시
var x; // 평가
x = 1; // 실행
평가 단계
변수 선언문 var x;를 먼저 실행함. 이 때 생성된 변수 식별자 x는 실행 컨텍스트가 관리하는 스코프에 등록, undefined로 초기화
실행 단계
변수 할당문 x = 1; 만 실행됨. 이를 실행하기 위해서 실행 컨텍스트가 관리하는 스코프에 변수 x가 등록되어 있는 지 확인. 스코프에 등록되어 있다면 x변수에 값을 할당하고, 결과를 실행 컨텍스트에 등록.