자바스크립트 코드가 실행되고 연산되는 범위를 나타내는 추상적인 개념
- 실행할 코드에 제공할 "환경 정보"들을 모아놓은 객체 (박스, 컨테이너)
- 동일한 환경에 있는 환경 정보들을 모은 실행 컨텍스트를 콜 스택에 쌓아올린 후 실행함으로써 코드의 환경과 순서를 보장
특정 함수 내부에 종속되지 않는 코드들이 가지는 컨텍스트
전역 컨텍스트는 내부에서 두 가지 작업을 수행
window
전역 컨텍스트 생성this
를 전역 객체로 설정함수가 호출 될 때마다 새로운 실행 컨텍스트가 생성
eval
함수 내에서 실행되는 코드가 가지는 컨텍스트
자바 스크립트는 코드를 실행하는 순간, 전역 컨텍스트를 콜 스택에 담음
그 후 새로운 함수가 실행 될 때마다 실행 컨텍스트가 생성됨
이 때, 실행 컨텍스트는 "생성"과"실행"의 두 단계를 거침
변수와 해당 변수에 대입된 값을 매핑
= 참조 대상 식별자 (Identifier)
= 어떤 대상을 다른 대상과 구분하여 식별할 수 있는 유일한 이름
- 환경 레코드
렉시컬 중첩 구조 기반으로 변수, 함수 식별자와 값을 관리
호이스팅이 발생하게 되는 원인
= 렉시컬 환경 내에서 함수와 변수 선언을 저장
- 외부환경에 대한 참조
외부의 렉시컬 환경으로 접근 가능 (스코프 체인)
= 현재의 렉시컬 환경에서 변수와 매핑된 값을 찾지 못했다면, 외부 환경에서 해당 변수에 대한 내용을 탐색
- This 바인딩
전역 컨텍스트에서의This
는 전역 객체 =window
함수 실행 컨텍스트에서는 함수 호출 방식에 따라This
의 대상이 다름
- 객체 참조에 의한 호출 : 해당 객체
- 그 외의 호출 : 전역 객체
- strict mode :undefined
변수 환경 또한 렉시컬 환경이며, 렉시컬 환경이 가지는 모든 속성과 요소를 가짐
ES6에서부터 달라진 점
변수 환경은 변수var
만 저장
렉시컬 환경은 함수 선언과 변수let
,const
바인딩을 저장
모든 변수에 대한 값 할당이 완료된 후, 최종적으로 코드들이 실행되는 단계