[JS]Lexical Environment, EnvironmentRecord

서준·2023년 7월 12일
1
post-thumbnail

지난 포스팅(실행 컨택스트) 을 통해 실행 컨택스트의 동작 원리를 다뤄봤습니다.
이번 포스팅에서는 호이스팅을 다루기 이해해야 할 Lexical EnvironmentEnvironmentRecode 에 대해 다뤄보도록 하겠습니다.

Lexical Environment 란?

Lexical Environment는 자바스크립트 코드에서 변수나 함수 등의 식별자를 정의하는데 사용하는 객체로 생각하면 쉽습니다.한국어 번역으로는 정적인 환경 ,렉시컬 환경 이라는 단어로 부르기도 하지만 가급적 원워를 문자 그대로 사용하는 편이 좋습니다.Lexical Environment 는 식별자와 참조 혹은 값을 기록하는 EnvironmentRecordouter라는 또 다른 Lexical Environment를 참조하는 포인터로 구성됩니다. outer 는 외부 Lexical Environment를 참조하는 포인터로, 중첩된 자바스크립트 코드에서 스코프 체인 을 하기 위해 사용합니다.

Environment Recordouter 를 조금 더 이해하기 쉽게 구조를 이미지화하여 만들어보았습니다.

그렇다면 위에서 나온 EnvironmentRecord 란 무엇일까요

EnvironmentRecord 란?

EnvironmentRecord (환경 레코드) 는 변수와 함수 선언을 저장하고 관리하는 데 사용되는 내부 데이터 구조입니다.
EnvironmentRecord는 실행 컨텍스트와 관련이 있으며, 변수와 함수에 접근하고 조작할 수 있는 방법을 제공합니다.

아래 시각화 자료를 통해 작동 원리를 보다 쉽게 알아보겠습니다.

execution context(실행 컨택스트)가 콜 스택에 담길 때 EnvironmentRecode(환경 레코드) 도 같이 생성됩니다.
그 후 실행 컨텍스트 생성단계에서 변수와 함수의 결정을 저장합니다.
저장 후 실행단계에서 execution context (실행컨텍스트)가 변수와 함수에 접근한 뒤 EnvironmentRecord가 안에 있는 변수를 참조 하게 되면서 호이스팅의 동작 과정이 이루어 지게 됩니다.

전역 실행 컨텍스트의 경우도 마찬가지로 , 전역 객체(Global Object)와 관련된 EnvironmentRecord가 생성됩니다. 전역 실행 컨텍스트에 있는 변수 함수 등의 실별자를 미리 저장하게 되고 이 전역객체에는 브라우저의 window , node.js의 글로벌 객체 등이 있습니다 전역 객체에 대해 더 궁금하다면 이 글을 참조하길 바랍니다 .

profile
하나씩 쌓아가는 재미

0개의 댓글