ScopeInfo는 V8 엔진이 JavaScript 함수나 블록을 실행할 때 사용하는 "변수 정보 테이블"입니다.
V8은 자바스크립트 코드를 실행할 때, 각 함수나 블록 스코프마다 어떤 변수가 선언되었는지 추적하고 관리해야 합니다. 이때 ScopeInfo가 그 역할을 해요.
V8에서 ScopeInfo는 스코프(범위)와 관련된 모든 변수 정보와 구조를 담고 있는 메타데이터 객체입니다.
function foo(x) {
const y = 10;
function bar() {
return x + y;
}
return bar;
}
위 코드를 V8이 처리할 때:
이런 정보를 저장합니다.
1️⃣ 클로저 지원
함수 내부에서 외부 변수에 접근할 때, V8은 ScopeInfo를 통해 해당 변수를 찾습니다.
2️⃣ 최적화/디옵트 판단
어떤 스코프가 최적화되거나, 클로저가 많아지면 오히려 디옵트(최적화 해제)도 가능해요.
3️⃣ 디버깅/개발자 도구
Chrome DevTools에서 변수 목록을 보여줄 수 있는 이유도 ScopeInfo 덕분이에요.
+-----------------+
| ScopeInfo |
+-----------------+
| - variable names |
| - kind (var, let, const) |
| - index in context |
| - closure captured? |
+-----------------+
개념 | 설명 |
---|---|
Context | ScopeInfo에 따라 만들어지는 런타임 변수 저장 공간 |
Closure | 함수가 외부 변수(Context)를 계속 참조할 수 있게 해주는 구조 |
Environment | 실행 컨텍스트 체인 (Scope Chain) |
ScopeInfo는 V8이 각 스코프의 변수 구조와 정보를 기록하는 설계도 같은 것입니다.
클로저, 최적화, 디버깅 등 모든 런타임 작동의 기반이 되는 구조에요.