실행 가능한 코드


자바스크립트 엔진은 실행 가능한 코드를 만나면 그 코드를 평가해서 실행 문맥으로 만든다. 이 실행 가능한 코드의 유형은 다음과 같다.

전역 코드는 전역 객체 아래에 정의된 함수를 말하고, 함수 코드는 문자 그대로 함수를 말하먀 eval 코드는 eval함수를 말한다. 자바스크립트 엔진이 실행 가능한 코드의 유형을 분류하는 이유는 실행 문맥을 초기화하는 환경과 과정이 다르기 때문이다. 특히 eval 코드는 앞으로 설명할 렉시컬 환경이 아니라 별도의 동적 환경에서 실행된다.

실행 문맥의 구성


실행 문맥은 실행 가능한 코드가 실제로 실행되고 관리되는 영역으로 실행에 필요한 모든 정보를 컴포넌트 여러 개로 나누어 관리하도록 만들어져있다. 그 중에서 가장 중요한 컴포넌트는 렉시컬 환경 컴포넌트, 변수 환경 컴포넌트, 디스 바인딩 컴포넌트 이다.

렉시컬 환경 컴포넌트와 변수 환경 컴포넌트


렉시컬 환경 컴포넌트와 변수 환경 컴포넌트는 앞으로 설명할 렉시컬 환경 타입의 컴포넌트이다. 렉시컬 환경 컴포넌트와 변수 환경 컴포넌트는 타입이 같고 with문을 사용할 때를 제외하면 내부 값이 같으므로 똑같이 취급해도 무리가 없다.

디스 바인딩 컴포넌트


디스 바인딩 컴포넌트는 그 함수를 호출한 객체의 참조가 저장되는 곳이다. 이것을 가리키는 값이 곧 해당 문맥의 this가 된다.

렉시컬 환경 컴포넌트 구성