실행 컨텍스트는 JavaScript 코드가 실행되는 환경을 의미한다.
자바스크립트 엔진은 코드를 실행하기 위해 다양한 실행 정보를 저장하고 관리
var x = 'xxx';
function foo () {
var y = 'yyy';
function bar () {
var z = 'zzz';
console.log(x + y + z);
}
bar();
}
foo();
위 코드를 실행하면 그림과 같이 EC Stack이 생성되고 소멸한다.

JavaScript 엔진은 콜 스택(Call Stack, 실행 스택) 을 사용하여 실행 컨텍스트를 관리
1. 글로벌 실행 컨텍스트 (Global Execution Context, GEC)
window(브라우저 환경) 또는 global(Node.js 환경)이 this로 설정2. 함수 실행 컨텍스트 (Function Execution Context, FEC)
실행 컨텍스트는 생성 단계 → 실행 단계로 나뉜다.
Creation Phase (생성 단계)
var는 undefined, let/const는 TDZ).Execution Phase (실행 단계)
NOTE
EC가 생성될 때 변수 환경, 렉시컬 환경, this 바인딩이 함께 설정된다.
이들은 실행 컨텍스트 내에서 코드 실행에 필요한 데이터를 관리하는 역할을 한다.1. 변수 환경(Variable Environment)
var,let,const선언 변수 저장- 함수 선언, arguments 객체 포함
2. 렉시컬 환경(Lexical Environment)
- 스코프(변수 접근 가능 범위)와 클로저 저장
- outer 참조(상위 실행 컨텍스트와 연결된 스코프 체인)
3. this 바인딩(This Binding)
- 실행 컨텍스트 내에서 this가 어떤 객체를 참조하는지 저장
Lexical : 프로그래밍에서 렉시컬이란 "코드가 작성된 시점"을 말한다.
JavaScript에서 렉시컬 환경은 변수 및 함수가 선언된 시점의 환경을 기억하는 방식이다.
-> 방식이라는게 js의 내부 로직이라는건가?
🔥 렉시컬 환경은 어떻게 동작할까? (내부 로직)
JavaScript에서 코드 실행 단계는 크게 두 가지야:
1️⃣ 환경 구성(변수 저장) → "렉시컬 환경 생성"
2️⃣ 실행(변수 읽고 사용)
📌 1. 렉시컬 환경 구성 (변수 저장)
자바스크립트 엔진이 코드를 실행하기 전에 변수 및 함수 선언을 렉시컬 환경에 저장함.
어디에서 선언되었는지(스코프 위치)를 기준으로 관리됨.
내부적으로 "환경 레코드(Environment Record)"라는 객체에 변수들이 저장됨.
📌 2. 실행 (변수 검색 및 사용)
변수를 사용할 때, 자바스크립트 엔진은 현재 실행 중인 스코프의 렉시컬 환경을 먼저 확인함.
