잘못 된 내용에 대한 지적은 언제든 환영입니다.
실행 컨텍스트의 기본 정의
- 실행 컨텍스트란? 코드 실행에 필요한 환경 정보를 모아놓은 객체이다.
- 필요한 환경 정보를 모아 컨텍스트를 구성하며, 콜스택에 쌓인다.
👉 실행 순서가 보장된다.
- 코드 실행에 필요한 환경 정보
- 변수 : 전역 변수, 지역 변수, 매개 변수, 객체의 프로퍼티
- 함수 선언
- 스코프
- this
실행 컨텍스트의 구성 요소
- 변수 객체
- 전달 인자와 변수 및 함수 선언을 갖는다.
- 변수 객체화가 진행되는 시점에서 함수 및 변수 호이스팅이 발생한다.
- 스코프 체인
- 전역 객체와 상위 함수 스코프 및 자기 자신의 지역 스코프의 참조값이 차례대로 저장되어 있는 리스트이다.
- 이를 통해 객체의 프로퍼티를 제외한 상위 스코프의 식별자를 검색하여 참조할 수 있다.
👉 특정 식별자를 참조할 시, 자기 자신에 해당하는 지역 스코프에 없을 경우 스코프 체인을 통해 상위 스코프를 탐색한다. 검색에 실패하면 참조 에러를 발생시킨다.
- this value
- 자신이 속한 객체를 가리키는 자기 참조 변수 값이 할당된다.
- this 값은 함수 호출 패턴에 의해 결정된다.
전역/함수 컨텍스트의 특징
function outer() {
function inner() {
return;
}
inner();
}
outer();
- 전역 컨텍스트
- 애플리케이션이 실행되면 먼저 콜스택에 쌓이게 되는 실행 컨텍스트이며, 애플리케이션 종료 시 콜스택에서 소멸된다.
- 변수 객체가 전역 객체를 가리킨다. 전역에 선언 된 전역 변수와 전역 함수를 프로퍼티로 소유한다.
👉 인수를 받는 매개 변수가 없기에 arguments 객체가 없다.
- this를 전역 객체로 설정한다.
- 함수 컨텍스트
- 함수가 호출되면 콜스택에 쌓이는 실행 컨텍스트이며, 함수 종료 시 콜스택에서 소멸된다.
- 변수 객체가 활성 객체를 가리킨다. 인수를 받는 매개 변수가 있기에 argument 객체가 있으며, 그 외에 지역 변수와 지역 함수를 프로퍼티로 소유한다.
- this는 함수의 호출 형태나 명시적 바인딩에 따라 다르다.
References
"모던 자바스크립트 Deep Dive" .이응모