자바스크립트 코드가 실행되는 환경을 정의하는 추상적인 개념
변수, 함수, 객체 등이 서로 상호작용하는 방식을 성명하고 자바스크립트 엔젠이 코드를 실행할 때 관리하는 중요한 매커니즘
주요 역할
- 변수와 함수 관리
- 코드의 실행 순서 제어
- 스코프 체인 관리
종류
- 전역 실행 컨텍스트 ( Global Excution Context )
자바스크립트 코드가 처음 실행되면 생성됨. 프로그램이 종료될 때까지 유지
전역객체와 this를 포함함
자바 스크립트는 싱글 스레드 이므로 단 한개만 존재함
- 함수 실행 컨텍스트 ( Function Excution Context )
함수가 호출될 때마다 생성됨
함수 내부에서 정의된 변수, 인수, this를 관리함
함수가 종료되면 실행 컨텍스트 또한 사라짐
- Eval 실행 컨텍스트 ( Eval Excution Context )
eval 함수로 실행된 코드를 위한 컨텍스트로 일반적으로 사용하지 않음
생성 절차
- 생성 단계
- 변수 선언 : 모든 변수는 초기값 undefinded로 설정됨
- 함수 선언 : 함수 선언이 메모리에 저장 됨 ( 호이스팅 )
- ths 결정 : this의 값이 결정됨
- 실행 단계
- 코드가 한 줄씩 실행되며, 변수에 값이 할당되고, 함수 호출이 이루어짐
자바스크립트 엔진은 실행 컨텍스트를 스택으로 관리함
실행되는 컨텍스트가 스택의 최상단에 올라가며, 실행이 끝나면 제거됨
Lexical Environment 와 Variable Environment의 차이
- Lexical
- 현재 컨텍스트의 스코프와 상위 스코프 참조를 저장함
- 함수 선언과 변수 선언을 포함
- Variable
- 실행 중인 변수 상태를 저장
- 초기화는 동일하지만 이후 값 업데이트에 초점을 맞춤
클로저는 실행 컨텍스트의 스코프 체인을 활용해 외부 함수의 변수를 기억하고, 이를 참조할수 있게 함. 렉시컬 스코핑 덕분에 가능함
구성요소
- 변수 객체
실행 컨텍스트 내부에서 사용되는 변수와 함수 선언을 저장하는 공간. 전역 컨텍스트에서는 전역 객체가 변수 객체의 역할을 하고, 함수 컨텍스트에서는 활성화 객체가 변수와 매개변수를 관리함
- 스코프 체인
현재 실행중인 컨텍스트와 외부 렉시컬 환경의 연결을 유지함. 변수를 참조시 현재 컨텍스트에서 찾지 못하면 외부 환경으로 범위를 넓혀가며 변수를 찾음
- this
실행 컨텍스트에 따라 참조하는 객체가 달라짐. 전역에서는 this가 전역 객체를 가리키며, 함수 컨텍스트에서는 함수 호출 방법에 따라 달라짐
이런 구성 요소를 바탕으로 자바 스크립트 코드가 실행되는 동안 환경을 관리하고, 코드 실행 시 변수의 유효 범위나 함수 호출의 맥락을 결정 지음