inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

프론트엔드 마스터클래스

10. 변수 객체

Variable Object 질문

해결된 질문

160

hans

작성한 질문수 3

0

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

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

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

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

javascript react 함수형-프로그래밍 객체지향 next.js

답변 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로 가는 것이 가장 효과적입니다.

커서에서 shift+enter가 안됩니다.

0

12

1

mcp 설치를 못하겠어요

0

14

1

라이브러리 관련 질문 있습니다!

0

11

1

노션 학습 자료 권한 요청

0

10

1

output-styles은 Claude Code의 공식 기능이 아니라고 하는데 혹시 변경된걸까요?

0

17

2

클로드 변경

0

14

1

/config 에서 output-style 을 변경

0

17

1

한국어 문제

0

18

2

Singleton 관련 질문입니다.

1

25

2

part2강의 문의사항입니다.

0

14

2

3강 질문

0

13

1

Node.js 관련 질문드립니다.

0

23

3

클로드 버전업 설치

0

21

2

쿠폰 문의 드립니다.

0

16

2

현재 진행중인 강의에 마케팅 요소를 녹이는 방법

0

35

1

불변성을 지키며 수정 삭제를 할때도 Map이 유리한가요?

0

54

1

30강 Map 자막이 이상합니다.

0

44

1

추천패턴

0

68

1

원시 데이터 할당 방식

0

69

2

배포 관련 내용 추가될 예정이 있을까요?

0

146

1

학습자료는 따로 공유가 안되는건가요?

0

199

2

이벤트 루프 실행 관련

0

144

2

Map 강의 누락된 것 같습니다.

0

154

2

메모이제이션 뒷부분 짤린건가요?

0

210

2