🌐 자바스크립트가 코드를 실행할 때 필요한 모든 정보를 담고 있는 공간
자바스크립트 엔진은 코드 한 줄 한 줄을 실행하기 전에 "코드 실행 준비 완료" 라는 의미로 실행 컨텍스트를 만들고 그 안에 변수, 함수, this, 외부 정보 등을 전부 정리해 둔다.
⚙️ 실행 컨텍스트가 만들어 질때
- 자바스크립트 코드 시작할 때 -> 전역 실행 컨텍스트
- 함수가 호출될 때마다 -> 새 함수 실행 컨텍스트
# 함수가 중첩되어 있으면 실행 컨텍스트도 쌓이고 끝나면 빠진다.
🛖 실행 컨텍스트 내부 구조
구성 요소 | 설명 |
VariableEnvironment | 변수와 함수 선언 정보 저장 (var , function) |
LexicalEnvironment | let , const 같은 블록스코프 변수 저장 |
thisBinding | 현재 컨텍스트에서의 this가 가리키는 값 |
Outer Environment Reference | 바깥 스코프와 연결된 참조 (스코프 체인) |
📌 실행 컨텍스트 생성 과정 (3단계)
1. 호이스팅 준비 단계 (변수 등록)
- var -> undefined로 등록
- function 선언 -> 함수 전체 등록
- let / const -> 이름만 등록 (TDZ 상태), 초기화는 아직 X
function test() {
console.log(x); // undefined
var x = 1;
let y = 2;
}
➡️ 위 코드 실행 전에 test 함수가 실행되면 엔진이 x는 undefined로 y는 TDZ에 넣어둔다.
2. TDZ 할당 단계 (초기화 전 잠금)
- let 과 const는 초기화되기 전까지 TDZ 에 갇혀 있다.
- 이 상태에선 변수에 접근만 해도 ReferenceError 발생
3. 코드 실행 (초기화 및 값 할당)
- 코드가 위에서 아래로 실행되며
- 각 변수에 실제 값 할당 (초기화)
- TDZ 상태의 변수는 이 시점에 활성화 된다.
🌐 실행 컨텍스트 스택(Stack)
자바스크립트는 스택 구조로 실행 컨텍스트를 관리한다.
➡ 전역 → 함수 → 중첩 함수 식으로 쌓이고
➡ 실행이 끝나면 가장 위에 있는 실행 컨텍스트부터 스택에서 제거된다.
function a() {
console.log('a');
b();
}
function b() {
console.log('b');
}
a();
순서
- 전역 실행 컨텍스트 생성
- a() 호출 -> a 함수 실행 컨텍스트가 실행 컨텍스트 스택에 추가됨
- b() 호출 -> b 함수 실행 컨텍스트가 스택에 추가됨
- b 함수 실행 완료 -> b 컨텍스트가 스택에서 제거됨
- a 함수 실행 완료 -> a 컨텍스트가 스택에서 제거됨
- 전역 실행 컨텍스트만 남아 계속 유지됨
예제
let x = 1;
function khj() {
let y = 2;
function nice() {
let k = 3;
console.log(x,y,k);
}
nice();
}
khj();
예제 흐름 :
- 전역 컨텍스트 생성 -> 변수 x에 1 할당
- khj() 함수 호출 -> khj 함수의 실행 컨텍스트가 스택에 추가됨
- nice() 함수 호출 -> nice 함수의 실행 컨텍스트가 스택에 추가됨
- 로그 실행 -> x , y , k 값 출력
- nice 함수 실행 완료 -> nice 컨텍스트가 스택에서 제거됨
- khj 함수 실행 완료 -> khj 컨텍스트가 스택에서 제거됨
- 전역 실행 컨텍스트만 남아 유지됨
🌐 실행 컨텍스트 정리
구분 | 설명 |
생성 시점 | 전역 실행 / 함수 호출할 때 |
구조 | 변수, 함수, this, 외부 환경 등 저장 |
관리 방식 | 스택처럼 쌓이고 끝나면 제거 |
중요한 이유 | 호이스팅, TDZ, 클로저, this 등 모든 핵심 개념과 연결 |
'면접 질문 관련' 카테고리의 다른 글
자바스크립트의 this (1) | 2025.06.11 |
---|---|
클로저 (Closure) 정리 (1) | 2025.06.09 |
스코프 체인 (Scope Chain) 정리 (1) | 2025.06.05 |
var, let, const 정리 (0) | 2025.06.05 |