ScopeInfo란?

rada·2025년 4월 6일
0

개발

목록 보기
29/43

🔍 ScopeInfo란?

ScopeInfo는 V8 엔진이 JavaScript 함수나 블록을 실행할 때 사용하는 "변수 정보 테이블"입니다.

V8은 자바스크립트 코드를 실행할 때, 각 함수나 블록 스코프마다 어떤 변수가 선언되었는지 추적하고 관리해야 합니다. 이때 ScopeInfo가 그 역할을 해요.
V8에서 ScopeInfo는 스코프(범위)와 관련된 모든 변수 정보와 구조를 담고 있는 메타데이터 객체입니다.

💡 예제로 이해해보기

function foo(x) {
  const y = 10;
  function bar() {
    return x + y;
  }
  return bar;
}

위 코드를 V8이 처리할 때:

  • foo의 스코프에는 x, y, 그리고 bar가 있음
  • V8은 이 정보를 ScopeInfo라는 구조체에 저장
  • bar는 x, y에 접근하므로, Closure를 만들고 ScopeInfo를 참조하게 됨

🧠 내부적으로 ScopeInfo는…

  • 어떤 변수가 선언되었는지
  • 변수는 어떤 종류인지 (var, let, const, function, etc.)
  • 이름은 뭔지, 몇 개가 있는지
  • 이 스코프가 클로저로 캡처되는지 여부

이런 정보를 저장합니다.

🏗️ ScopeInfo가 사용되는 이유

1️⃣ 클로저 지원
함수 내부에서 외부 변수에 접근할 때, V8은 ScopeInfo를 통해 해당 변수를 찾습니다.

2️⃣ 최적화/디옵트 판단
어떤 스코프가 최적화되거나, 클로저가 많아지면 오히려 디옵트(최적화 해제)도 가능해요.

3️⃣ 디버깅/개발자 도구
Chrome DevTools에서 변수 목록을 보여줄 수 있는 이유도 ScopeInfo 덕분이에요.

⚙️ 간단한 구조도

+-----------------+
|   ScopeInfo     |
+-----------------+
| - variable names |
| - kind (var, let, const) |
| - index in context |
| - closure captured?     |
+-----------------+

🔄 관련 개념들

개념설명
ContextScopeInfo에 따라 만들어지는 런타임 변수 저장 공간
Closure함수가 외부 변수(Context)를 계속 참조할 수 있게 해주는 구조
Environment실행 컨텍스트 체인 (Scope Chain)

📌 요약하면:

ScopeInfo는 V8이 각 스코프의 변수 구조와 정보를 기록하는 설계도 같은 것입니다.
클로저, 최적화, 디버깅 등 모든 런타임 작동의 기반이 되는 구조에요.

profile
So that my future self will not be ashamed of myself.

0개의 댓글