강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

hans님의 프로필 이미지
hans

작성한 질문수

프론트엔드 마스터클래스

10. 변수 객체

Variable Object 질문

해결된 질문

작성

·

10

·

수정됨

0

안녕하세요, 좋은 강의 감사합니다.

실행 컨텍스트 부분에서 궁금한 점이 있어서 질문드립니다. 강의에서 Variable Object를 설명해주셨는데, 제가 개인적으로 찾아본 자료들에서는 ES2015부터 실행 컨텍스트가 Lexical Environment, Variable Environment, this binding으로 구성된다고 나와 있더라고요.

Variable Object는 그 이전 스펙에서 사용되던 용어인 것 같은데, 혹시 강의에서 이 개념을 선택해서 설명하신 특별한 교육적 의도가 있으셨을까요?

제가 아직 깊이 이해하지 못해서 그런데, 두 방식 중 어떤 것이 JavaScript 동작 원리를 학습하는 데 더 도움이 되는지, 또는 어떤 차이점들이 있는지 알려주시면 감사하겠습니다.

답변 1

0

한상훈님의 프로필 이미지
한상훈
지식공유자

안녕하세요, 좋은 질문 남겨주셔서 감사합니다.

말씀해주신 대로 Variable Object(VO)Variable Environment(VE) 는 같은 실행 컨텍스트의 동작을 설명하는 개념이지만, 명세가 발전하면서 용어와 구조가 달라진 것입니다.

 

Variable Object (VO) — (ES3, 구개념)

  • 실행 컨텍스트가 생성될 때 함께 만들어지는 내부 객체로,

    • var 선언

    • 함수 선언

    • 함수 매개변수
      들이 VO에 등록됩니다.

  • 실행 컨텍스트의 생성 단계에서 이 값들이 VO에 채워지고,

  • 실행 단계에서는 이 VO를 참조하여 식별자를 조회합니다.
    즉, 당시 명세에서는 스코프를 단일 객체(VO)로 표현했다고 보시면 됩니다.

 

Variable Environment (VE) — (ES5 이후, 현대 개념)

  • VO 대신 Lexical Environment라는 더 정교한 구조가 도입되었습니다.

  • Lexical Environment는 두 가지로 이루어져 있습니다:

    1. Environment Record → 실제 변수, 함수, 매개변수가 저장되는 곳

    2. Outer Lexical Environment Reference → 부모 스코프를 가리키는 참조 (스코프 체인)

  • 이 중 Variable Environment는 특별히 var, 함수 선언, 함수 매개변수를 담는 Environment Record를 의미합니다.

  • let, const 같은 블록 스코프 변수는 별도의 Declarative Environment Record에 관리됩니다.

핵심 차이

  1. 명세의 진화

    • VO는 ES3 시대 개념

    • VE는 ES5 이후 도입된 Lexical Environment 체계의 일부

  2. 스코프 관리 방식

    • VO는 단일 객체로 스코프 관리

    • VE는 계층적 구조를 가지며 스코프 체인을 통해 관리

  3. let/const 처리

    • VO는 let/const 개념이 반영되지 않음

    • VE/Lexical Environment는 이를 위한 별도의 구조를 제공

강의에서 VO를 사용한 이유

강의에서는 교육적 단순화를 위해 Variable Object 개념을 먼저 사용했습니다.

  • VO는 “실행 컨텍스트가 변수를 모아두는 저장소”라는 감각을 직관적으로 잡는 데 유리합니다.

  • 이후 ES2015+ 명세에 나오는 Lexical Environment / Variable Environment 개념을 학습하면, VO로 배운 직관을 그대로 확장할 수 있습니다.

정리하면, VO는 이해를 돕기 위한 구개념, VE는 현대 명세의 정식 구조이고,
학습 순서는 VO → VE/Lexical Environment로 가는 것이 가장 효과적입니다.

hans님의 프로필 이미지
hans

작성한 질문수

질문하기