본문 바로가기

Front/JavaScript

렉시컬 환경(Lexical Environment)이란

렉시컬 환경

 

렉시컬 환경은 자료구조 형태로 작동하며, 실행 컨텍스트를 구성하는 컴포넌트다.

관리하는 요소는 세 가지다.

 

1. 식별자

2. 식별자에 바인딩된 값

3. 상위 스코프에 대한 참조 (스코프 체인)

 


렉시컬 스코프의 실체

 

렉시컬 환경은 Key + Value 구조를 갖는 객체 형태의 스코프를 생성함.

식별자를 키로 등록하여 식별자에 바인딩된 값을 관리함.

 


실행 컨텍스트 구조

 

실행 컨텍스트는 LexicalEnvironmment 컴포넌트와 VariableEnvironment 컴포넌트로 구성됨.

실행 컨텍스트는 두 컴포넌트의 식별자를 키로 갖고 렉시컬 환경 객체에 대한 주소값을 값에 담음.

 

특수한 경우를 제외하곤 두 컴포넌트는 동일하다고 봄.

특수한 경우는 eval code, strict mode, try/catch 가 대표적이라고 함.

 

즉, 두 컴포넌트는 평상시에는 하나의 렉시컬 환경으로 인식하고 사용함.

 


렉시컬 환경 구조

 

렉시컬 환경은 EnvironmentRecord 컴포넌트와 OuterLexicalEnvironmentReference 컴포넌트로 구성됨.

 

환경 스코프(EnvironmentRecord)는 스코프에 포함된 식별자를 등록하며, 등록된 식별자에 바인딩된 값을 저장함.

외부 렉시컬 환경에 대한 참조(OuterLexicalEnvironmentReference)는 상위 스코프를 가리킨다. 즉, 해당 실행 컨텍스트를 생성한 소스코드를 포함하는 상위 코드의 렉시컬 환경을 가리킨다. 이를 통해 단방향 LinkedList 자료구조 형태로 구현된 ScopeChain을 구현함.

 


렉시컬 환경이란

 

실행 컨텍스트는 세 가지 값을 관리함.

 

1. 해당 스코프에서 선언된 식별자

2. 1번 식별자에 바인딩된 값

3. 해당 실행 컨텍스트를 생성한 소스 코드를 포함하는 상위 코드의 렉시컬 환경에 대한 주소값

 

실행 컨텍스트는 LexicalEnvironment, VariableEnvironment 두 컴포넌트로 해당 값이 있는 객체의 주소값을 관리함.

두 컴포넌트는 렉시컬 환경 객체를 참조함.

 

렉시컬 환경 객체는 EnvironmentRecord, OuterLexicalEnvironmentReference 두 컴포넌트로 해당 값을 관리함.

환경 레코드(EnvironmentRecord) 컴포넌트는 식별자 및 식별자에 바인딩된 값을 관리함.

외부 렉시컬 환경에 대한 참조(OLER)은 상위 렉시컬 환경에 대한 주소값을 관리하여 스코프 체인(ScopeChain)을 구현함.

 

즉, 실행 컨텍스트는 실질적으로 값을 관리하는 렉시컬 환경 객체에 대한 주소값만 관리할 뿐임.

해당 스코프에서 실행된 소스 코드의 실행 결과는 모두 렉시컬 환경에서 관리한다고 이해했음.

 

'Front > JavaScript' 카테고리의 다른 글

함수를 사용할 때 return을 제대로 활용하자  (0) 2023.01.27
커링 함수란 무엇일까?  (0) 2022.06.06
전역 객체란  (0) 2022.05.18
식별자 검색 과정  (0) 2022.05.18
소스 코드의 평가 및 실행  (0) 2022.05.18