실행 컨텍스트는 함수의 실행, 호이스팅, 렉시컬 환경, 클로저 같은 개념들을 관통하는 하나의 큰 개념이다
실행 컨택스트는 현재 실행중인 코드에 대한 세부 정보(제어 흐름의 위치, 선언된 변수와 함수, this, arguments 등) 를 담고있는 데이터 구조이다.
실행 컨텍스트 종류에는 두가지가 있다.
1. Global Execution Context - 스크립트가 처음 실행될때 생성된다.
arguments
객체가 없으며, 전역 객체 하나만을 포함하는 스코프 체인과 this
가 있다.<script />
태그를 마주치면, 생성된다.2. Function Execution Context - 함수가 호출될때 생성된다.
arguments
와 스코프 체인, this
가 있다.두 컨택스트는 실행 컨택스트 스택 이라는 자료구조에 저장되고 관리된다.
실행 컨택스트 스택이 바로 흔히 말하는 콜 스택이다.
전역 실행 컨텍스트는 스크립트 실행 시 가장 처음 생성되기 때문에 스택의 가장 아래 들어간다.
이후 코드가 실행되면서 함수가 호출되면 함수의 실행 컨텍스트가 만들어지고, 전역 실행 컨텍스트 위로 올라간다.
실행 컨텍스트는 생성단계와 실행 단계가 있다.
생성 단계에서 렉시컬 환경이 초기화되고 this 바인딩이 이루어진다.
참고
자바스크립트 - 실행 컨택스트(Execution Context) 와 렉시컬 환경(Lexical Environment)
변수의 유효범위와 클로저