1 minute read

  • 코드 블록 안에서 선언한 변수는 블록 안에서만 사용 가능

  • for 의 카운터 변수는 블록에 속하는 코드로 취급됨

  • 중첩 함수는 함수 내부에 선언한 함수를 말하며 외부 변수에 접근할 수 있음

  • 렉시컬 환경이란 JS 에서 실행 중인 함수, 코드 블록, 스크립트 전체에 가지는 ‘숨김 연관 객체’

  • 렉시컬 환경 객체는 환경 레코드(모든 지역 변수를 프로퍼티로 가지고 있는 객체. this 값과 같은 기타 정보도 저장)과 외부 렉시컬 환경에 대한 참조(외부에 대한 연관)로 구분

  • ‘변수’ 는 특수 내부 객체인 ‘환경 레코드’의 프로퍼티. 스크립트 시작되면 스크립트 내에서 선언한 변수 전체가 렉시컬 환경에 올라가지만 실행 흐름이 let 만나기 전까진 이 변수 참조 불가능

  • 렉시컬 환경에서 함수 선언문은 일반 변수와는 달리 바로 초기화 되고 사용 가능

  • 함수가 호출 중인 동안은 내부 렉시컬 환경과 내부 렉시컬 환경이 가리키는 외부(전역) 렉시컬 환경 두개를 실행 시 마다 갖게 됨

  • 코드에서 변수에 접근 시, 먼저 내부 렉시컬 환경을 검색 범위로 잡고 없을 시 외부 렉시컬 환경으로 확장

  • 함수는 [[Environment]]라 불리는 숨김 프로퍼티(함수가 만들어진 곳의 렉시컬 환경에 대한 참조) 갖고 중첩 함수 호출 시 각 호출마다 새로운 렉시컬 환경 만들어지며 [[Environment]] 에 저장된 렉시컬 환경을 외부 렉시컬 환경으로서 참조.

  • [[Environment]] 에서 변숫값 갱신은 변수가 저장된 렉시컬 환경에서 이뤄짐

  • 클로저는 외부 변수를 기억하고 이 외부 변수에 접근할 수 있는 함수를 의미하며 JS 의 모든 함수에선 외부 렉시컬 환경의 참조값을 가지게 되므로 자연스럽게 클로저 됨

  • 렉시컬은 명세서에서만 존재하는 ‘이론상의’ 객체이고 JS 엔진들은 명세서에 언급된 사항 준수하며 엔진 고유의 방법으로 렉시컬 환경 최적화

  • [[Environment]] 프로퍼티는 외부 함수 렉시컬 환경에 대한 정보가 저장되며 참조한 객체는 메모리에서 유지되어 가비지 컬렉션이 건드리지 않음.

  • 최적화 프로세스는 JS 엔진마다 다르며 V8은 디버깅 시 최적화 과정에서 제거된 변수를 사용할 수 없음.

Categories: ,

Updated: