728x90
반응형
SMALL

왜 렉시컬 환경과 변수 환경이 분리되어 있을까?
실행 컨텍스트의 정확한 구조
┌─────────────────────────────────────────────────────┐
│ 실행 컨텍스트 (Execution Context) │
├─────────────────────────────────────────────────────┤
│ │
│ 1. 렉시컬 환경 (Lexical Environment) │
│ ├─ 환경 레코드 │
│ └─ 외부 환경 참조 │
│ │
│ 2. 변수 환경 (Variable Environment) │
│ ├─ 환경 레코드 │
│ └─ 외부 환경 참조 │
│ │
│ 3. This 바인딩 (This Binding) │
│ │
└─────────────────────────────────────────────────────┘
각각의 역할
| 구성 요소 | 담당 |
| 렉시컬 환경 | let, const, 함수 선언문 |
| 변수 환경 | var |
| This 바인딩 | this 값 |
왜 렉시컬 환경과 변수 환경이 분리되어 있나?
function example() {
var a = 1; // 변수 환경
let b = 2; // 렉시컬 환경
const c = 3; // 렉시컬 환경
if (true) {
var d = 4; // 변수 환경 (함수 스코프)
let e = 5; // 새로운 렉시컬 환경 (블록 스코프)
}
}
블록 스코프 처리 때문입니다.
함수 실행 시:
┌─────────────────────────────────┐
│ 변수 환경 (함수 전체에서 유지) │
│ a: undefined → 1 │
│ d: undefined → 4 │
├─────────────────────────────────┤
│ 렉시컬 환경 │
│ b: <TDZ> → 2 │
│ c: <TDZ> → 3 │
└─────────────────────────────────┘
if 블록 진입 시:
┌─────────────────────────────────┐
│ 새 렉시컬 환경 (블록용) │
│ e: <TDZ> → 5 │
│ 외부 참조 → 함수 렉시컬 환경 │
└─────────────────────────────────┘
- 변수 환경: 초기 상태 그대로 유지
- 렉시컬 환경: 블록 진입할 때마다 새로 생성 가능
728x90
반응형
LIST
'javascript' 카테고리의 다른 글
| 전역 객체 (Global Object) (0) | 2026.01.27 |
|---|---|
| 렉시컬 스코프 (정적 스코프) 결정 방식 (0) | 2026.01.27 |
| 화살표 함수의 this가 정적인 이유 (0) | 2026.01.26 |
| 함수 선언문은 함수이름이 아니라 자바스크립트 엔진이 암묵적으로 만든 식별자로 호출된다 (0) | 2026.01.26 |
| 함수 선언문과 실행 컨텍스트: 메모리 관점에서 이해하기 (0) | 2026.01.26 |
댓글