본문 바로가기

Dev/[Javascript]

[javascript] 렉시컬 환경(Lexical Environment)

반응형

INTRO


개발을 진행하면서, 모호했던 javascript의 개념들을

다시 한번 정리하기 위한 포스팅이다.

 

자바스크립트의 렉시컬 환경(Lexical Environment)에 대해서 알아본다.

 


 

0. 서론

- 이전 포스팅에서 실행 컨텍스트에 대해 정리했는데, 해당 글을 보면 실행 컨텍스트의 구성 요소 중 렉시컬 환경이 있었다.

- 렉시컬 환경이 뭘까?

2023.01.10 - [Dev/[Javascript]] - [javascript] 실행 컨텍스트(Execution Context)

 

[javascript] 실행 컨텍스트(Execution Context)

INTRO 개발을 진행하면서, 모호했던 javascript의 개념들을 다시 한번 정리하기 위한 포스팅이다. 자바스크립트의 실행 컨텍스트(Execution Context)에 대해서 알아본다. 0. 서론 - 실행 컨텍스트는 직역하

rangsub.tistory.com

 

- Lexical을 직역하면 '어휘'

- 우리말로 어휘란 어떤 특정한 범위 내에서 사용되는 낱말의 집합을 뜻한다.

- 우리말의 의미와 100% 매칭되진 않지만 얼추 비슷해 보이므로, 이 의미로 감을 먼저 잡으면 될 것 같다.

 

- 자바스크립트의 코드가 동작하기 위해선 다양한 정보가 필요하다.

- 간략한 예를 아래에 들자면, func() 함수 내 a+b를 계산하기 위해서는,

- 전역으로 선언되어있는 a 에 대한 정보를 함수 내부에서 알고 있어야한다.

let a = 10;

function func() {
  console.log(a);
  let b = 30;
  let c = a + b;
  console.log(c);
}

func();

 

- 어떻게 알 수 있을까?

('전역으로 선언되어있으니까~' 라며 항상 당연하다고만 생각하고 넘어갔었다.)

- 그것은 func()함수의 렉시컬 환경에, a를 참조할 수 있는 정보가 들어있기 때문이다.

- 즉 렉시컬 환경이란,

- 특정한 범위 내에서, 코드를 실행하기 위해 사용되는 정보의 총 집합

- 을 가진 환경 이라고 생각하면 될 것 같다.

- 여기서 '범위(스코프)' 는 자바스크립트 뿐만 아니라 다른 언어에서도 통상적으로 있는 아주 중요한 개념인데,

- 아래 글을 보고 이 스코프 개념을 먼저 정리하고 넘어가보자.

2023.01.16 - [Dev/[Javascript]] - [javascript] 스코프(Scope)

 

1. 렉시컬 환경은 무엇인가?

- 렉시컬 환경은 스코프와 스코프 체인, 스코프 내부에 선언된 함수나 변수, 인자로 받은 정보등을 전부 포함하고 있는 하나의 환경이다.

- 그러므로 스코프의 상위 개념이 된다.

- 이 렉시컬 환경은 이전 포스팅에서 설명한 실행 컨텍스트의 구성 요소이다.

출처 : https://m.blog.naver.com/dlaxodud2388/222655214381

 

- 실행 컨텍스트는 호출 스택에 하나씩 Push되고 Pop되면서 실행되는 특성이 있는데,

- 실행될 때 다른 실행 컨텍스트 내 렉시컬 환경을 참조하면서 관계나 범위를 정해주는 역할을 한다.

- Key : Value 형태로 정보를 모두 가지고있는 하나의 객체로 봐도 무방하다(다만 코드를 짜면서 우리가 이 객체를 조회하거나 수정할 수는 없다)

 

2. 렉시컬 환경의 구성 요소

- 렉시컬 환경은 환경 기록(Environment Records) 와 외부 렉시컬 환경에 대한 참조(Outer Reference Environment) 로 구성되는데

- 환경 기록(Environment Records)에는 로컬 변수에 대한 정보들을 저장하고 있고,

- 외부 렉시컬 환경에 대한 참조(Outer Reference Environment)에는 상위 렉시컬 환경에 대한 정보가 저장되어 있다.

- (정확히 말하면 상위 렉시컬 환경의 주소가 저장되어 있고 이 주소를 참조하여 상위 렉시컬 환경의 정보에 접근하는 것을 스코프 체인이라고 한다.)

 

 

 

마무리

렉시컬 환경은 실행 컨텍스트의 구성요소로써 논리적으로 구분된 환경이며, 실행 컨텍스트 > 렉시컬 환경 > 스코프 순으로, 개념적으로 포함한다고 봐도 무방해보인다.(틀렸다면 댓글로 알려주시면 감사하겠습니다.)

 

 

 

 

-퍼가실 때는 출처를 꼭 같이 적어서 올려주세요!

 

반응형