실행 컨텍스트란(Execution context)?
Execution context
실행할 코드에 제공할 환경 정보들을 모아 놓은 객체
- 자바스크립트는 동일한 환경에 있는 실행 컨텍스트를 콜 스택에 쌓아올린 후 실행하여 코드의 환경과 순서를 보장할 수 있게 된다.
콜 스택에 실행 컨텍스트가 쌓이는 순서
- 전역 컨텍스트(Global context)를 콜 스택에 쌓는다.
- a의 실행 컨텍스트를 생성하고 콜 스택에 쌓고, 전역 컨텍스트와 관련된 코드의 실행을 일시적으로 중단하고 a 실행 컨텍스트의 코드를 실행한다.
- b의 실행 컨텍스트를 콜 스택에 쌓고, a와 관련된 코드의 실행을 일시적으로 중단하고 b 실행 컨텍스트의 코드를 실행한다.
- b 컨텍스트의 코드 실행이 종료되면 콜스택에서 제거된다. a 실행 컨텍스트의 코드 실행이 중단된 지점부터 코드가 실행된다.
- a 컨텍스트의 코드 실행이 조료되면 콜스택에서 제거된다. 전역 컨텍스트의 코드 실행이 중단된 지점부터 코드가 실행된다.
실행 컨텍스트의 내부 정보
Execution context
는 Variable Environment
, Outer Environment
라는 Lexical Environment
를 갖는다.
Variable Environment
생성한 변수가 있는 위치에 대한 정보
Lexical Environment
environment record, outer environment reference로 구성된 환경
environment record
Environment 내의 식별자 정보(변수나 함수의 바인딩)를 포함하고 변수 객체를 관리하는 역할
outer environment reference
상위 Lexical Environment에 대한 참조
- 중첩된 자바스크립트 코드에서 스코프 탐색을 위해 사용한다.
- This Binding
- Global execution context에서
this는
global object를 가리킨다.
- Function execution context
- 함수가 object reference로 호출되었다면
this
는 해당 객체를 가리킨다.
- 그렇지 않다면
this
는 글로벌 객체(window)를 가리키거나 strict mode에서는 undefined
를 가리킨다.
참고 자료