LexicalEnvironment vs VariableEnvironment

59INU·2022년 11월 15일
0

째끄만 공부

목록 보기
1/3
post-thumbnail

자바스크립트 딥다이브 읽다가 실행컨텍스트 구성 요소, 구조가 헷갈려서 찾아보다가 공식 명세까지 갔다. 그냥 명세를 먼저 찾아봤으면 빠를 것을 그랬다.

실행컨텍스트의 구조

https://262.ecma-international.org/5.1/#sec-10.3

  1. 렉시컬 환경:
    • 환경레코드: 유효범위 내의 식별자와 식별자에 바인딩 된 값을 저장
    • 외부 렉시컬 환경 참조
  2. 변수 환경:
    • 환경레코드: 유효범위 내의 var 키워드나 변수선언문에 의해 생성된 식별자와 그 값을 저장
    • 외부 렉시컬 환경 참조
  3. This 바인딩

즉, 크게 나누면
식별자와 그 값을 저장하는 역할, 외부 렉시컬 환경에 대한 참조 (*클로저), This 바인딩 정보를 가지고 있다.

렉시컬 환경 vs 변수 환경

헷갈렸던 부분은 렉시컬 환경이라는 키워드로 실행컨텍스트를 설명하는 글들이 많았는데 막상 실행컨텍스트는 얼핏 동일한 목적의 변수 환경 또한 구성 요소가 가지고 있었다는 점이다. 변수 환경의 정체는 뭐고 분리한 이유는 뭐며, 왜 모두 렉시컬 환경만 이야기 하고 있냐는 점이 궁금했는데

함수 스코프 내에서도 var 변수와 함수 선언문은 호이스팅이 일어나고, 이를 위해 식별자를 분류해 저장해야하기 떄문이며, 이러한 이슈를 제외하면 두 데이터는 동일한 구조로 실행컨텍스트의 식별자 관리와 외부 환경 참조라는 역할만이 남기 때문에 렉시컬 환경으로 주로 이야기하는 것인듯~~

window.varVariable & window.letVariable

그러니까 이건 hoisting과 TDZ에 대한 부분을 대충만 알고 있었기 때문이다, 라기 보다는 전역에서 let,const 키워드로 선언한 변수는 var 혹은 function 키워드로 선언한 함수와 달리 전역 객체의 프로퍼티로 등록되지 않고 일종의 개념적 블록 내에 존재한다. 에서의 개념적 블록이 아마 이거겠지 싶다. 아닌가

재활의 일종으로 어스름 아는듯한 기분의 불쾌함을 타파하고자 기본서 읽다보니까 이제보니 예전에 그거 쉽게 설명하려다 오히려 어려워진게 아닌가 싶은 생각이 들 때가 있는데, 실행컨텍스트 구성 요소를 까보면 사실 클로저는 외우거나 딱히 이해를 해야하는 대상이 아닌 것 같다. 라고 해도 이미 지났으니 그 때의 나에게 동의를 얻을지는 모를 일이지만...

profile
개랑 사는 개발자

0개의 댓글