인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

김세경님의 프로필 이미지
김세경

작성한 질문수

코어 자바스크립트

Variable Environment

작성

·

206

1

Variable Environment는 컨텍스트가 실행될 때 값을 스냅샵을 찍어놓는다고 하셨는데요. 실행 컨텍스트에서는 Lexical Environment만 사용하는거 같은데.. Variable Environment는 어떤 경우에 사용이 되나요?

답변 4

3

with함수를 사용할 때(콘텍스트 확장) 사용되는것으로 알고 있습니다.

2

정재남님의 프로필 이미지
정재남
지식공유자

@아기고양이 감사합니다!

1

그저 순서상으로 EC 생성시 변수정보를 수집하여 Variable Environment를 만들고,
이후에는 그 복제품인 Lexical Environment를 사용한다 정도로 이해하시면 될 것 같습니다.

영상에서는 VE가 LE의 초기값을 스냅샷찍다고했는데 LE가 VE의 초기값을 복제하는건가요?

정재남님의 프로필 이미지
정재남
지식공유자

제가 LE와 VE의 생성 순서를 중요하게 생각하지 않아서 그때그떄 표현방식에 따라 순서가 섞였던 것 같습니다.
혼란을 느끼셨다면 사죄드립니다.

공식문서를 보고 직접 이해하시는 편이 정확하겠죠.
https://262.ecma-international.org/12.0/#sec-execution-contexts

바로 아래쪽에는 이런 문구가 있습니다.

An execution context is purely a specification mechanism and need not correspond to any particular artefact of an ECMAScript implementation. It is impossible for ECMAScript code to directly access or observe an execution context.

아래에서 순서를 유추할 수는 있겠네요.
https://262.ecma-international.org/12.0/#sec-prepareforordinarycall

1

정재남님의 프로필 이미지
정재남
지식공유자

저도 여러가지 문서를 찾아 읽어보았는데 명확하질 않았어요.
사용처에 대해서는 정확히 파악하기가 어렵네요.

그저 순서상으로 EC 생성시 변수정보를 수집하여 Variable Environment를 만들고,
이후에는 그 복제품인 Lexical Environment를 사용한다 정도로 이해하시면 될 것 같습니다.

여담으로 strict mode에서는 arguments의 값을 변경/삭제할 수 없게 되었습니다.
혹시 이것이 variable environment와 연관된 것은 아닐까 싶지만, 확실하진 않습니다.

나중에라도 답을 알게 되면 추가로 답변드릴게요.
혹 세경님께서도 알게 되시면 공유 부탁드려요!

김세경님의 프로필 이미지
김세경

작성한 질문수

질문하기