반응형
소스코드의 타입
ECMAScript의 사양은 소스코드를 4가지 타입으로 구분한다.
4가지 소스코드들은 실행컨텍스트를 생성한다.
소스코드 타입 | 설명 |
---|---|
전역코드 | 전역에 존재하는 코드. 전역에 정의된 함수, 클래스 등 내부코드는 포함하지 않음 |
함수코드 | 함수 내부에 존재하는 소스코드. 함수 내부에 중첩된 함수, 클래스 등의 내부코드를 포함하지는 않음 |
eval 코드 | 빌트인 전역함수인 eval의 인수로 전달되는 코드들 |
모듈코드 | 모듈 내부에 존재하는 소스코드들 |
전역 코드
전역코드는 전역 변수를 관리하기 위해 최상위 스코프인 전역스코프를 생성해야함
또한 var 키워드로 선언된 전역변수와 전역 함수를 전역 객체의 프로퍼티와 메서드로 바인딩하고 참조하기 위해 전역 객체와 연결되어야함
⇒ 전역 실행 컨텍스트의 생성
함수코드
함수코드는 지역 스코프를 생성하고 지역변수, 매개변수, arguments 객체를 관리함
생성한 지역스코프를 전역스코프에서 시작하는 스코프 체인의 일원으로 연결
⇒ 함수코드가 평가되면 함수실행컨텍스트가 생성
eval코드
엄격모드에서 자신만의 독자적인 스코프를 만듦
모듈모드
모듈코드는 모듈별로 독립적인 모듈 스코프를 만듦
소스코드의 평가와 실행
소스코드의 평가
실행컨텍스트 생성, 변수, 함수 선언문 실행하여 실행컨텍스트가 관리하는 스코프에 등록
소스코드의 실행
소스코드가 순차적으로 실행됨
이때 식별자들을 스코프에서 검사하여 취득함
실행컨텍스트의 역할
소스코드를 실행하는데 필요한 환경을 제공하고 코드의 실행결과를 실제로 고나리하는 영역임
- 선언에 의해 생성되 모든 식별자를 스코프별로 구분하여 등록하고 상태변화를 지속적으로 관리할 수 있어야함
- 스코프는 중첩관계에 의해 스코프 체인을 형성해야함
- 현재 실행중인 코드의 실행순서를 변경할 수 있어야 하고, 다시 되돌아 갈수도 있어야함
실행컨텍스트의 스택
실행컨텍스트는 스택형태로 관리됨
코드가 평가될 때 생성되어 스택에 push 되며, 끝마치면 pop됨
스택의 최상단에 존재하는 실행컨텍스트를 실행중인 실행 컨텍스트라 부름
렉시컬 환경
스코프와 식별자를 관리하는 실행컨텍스트의 컴포넌트
두가지의 컴포넌트로 구성됨
환경 레코드
스코프에 포함된 식별자를 등록하고, 등록된 식별자에 바인딩한 값을 관리하는 저장소
외부 렉시컬 환경에 대한 참조
상위 스코프를 가리킴
실행과정
- 실행컨텍스트 생성
- 렉시컬 환경생성
- 환경 레코드 생성
- 객체/함수 환경 레코드 생성
- (선언적 환경 레코드 생성)
- this바인딩
- 외부 렉시컬 환경에 대한 참조 결정
반응형