책) 코어 자바스크립트

변수의 유효범위와 렉시컬 환경 반.

MotherCarGasoline 2022. 7. 1. 23:13

https://ko.javascript.info/closure

 

변수의 유효범위와 클로저

 

ko.javascript.info

  • let 함수의 변수 선언은 코드블로{…} 안에서만 사용할 수 있습니다.
  • ‘렉시컬 환경’은 명세서에서 자바스크립트가 어떻게 도악하는지 설명하는데 쓰이는 ‘이론상의’ 객체 입니다. 따라서 코드를 사용해 직접 렉시컬 환경을 얻거나 조작하는 것은 불가능.

단계 1. 변수

자바스크립트에선 실행 중인 함수, 코드 블록 {...}, 스크립트 전체는 렉시컬 환경(Lexical Environment) 이라 불리는 내부 숨김 연관 객체(internal hidden associated object)를 갖습니다.

렉시컬 환경 객체는 두 부분으로 구성됩니다.

  1. 환경 레코드(Environment Record) – 모든 지역 변수를 프로퍼티로 저장하고 있는 객체입니다. this 값과 같은 기타 정보도 여기에 저장됩니다.
  2. 외부 렉시컬 환경(Outer Lexical Environment) 에 대한 참조 – 외부 코드와 연관됨

’변수’는 특수 내부 객체인 환경 레코드의 프로퍼티일 뿐입니다. '변수를 가져오거나 변경’하는 것은 '환경 레코드의 프로퍼티를 가져오거나 변경’함을 의미합니다.

이렇게 스크립트 전체와 관련된 렉시컬 환경은 전역 렉시컬 환경(global Lexical Environment)이라고 합니다.

요약

  • 변수는 특수 내부 객체인 환경 레코드의 프로퍼티입니다. 환경 레코드는 현재 실행 중인 함수와 코드 블록, 스크립트와 연관되어 있습니다.
  • 변수를 변경하면 환경 레코드의 프로퍼티가 변경됩니다.

단계 2. 함수 선언문

함수는 변수와 마찬가지로 값입니다.

다만 함수 선언문(function declaration)으로 선언한 함수는 일반 변수와는 달리 바로 초기화된다는 점에서 차이가 있습니다.