[TIL] 2022.04.19

Minsu Han·2022년 4월 19일
0

TODAY I LEARNED

목록 보기
36/46

오늘 한 일

  • 모던 자바스크립트 Deep Dive
  1. 실행 컨텍스트

배운 것

  • 실행 컨텍스트 : 식별자(변수, 함수, 클래스 등의 이름)을 등록하고 관리하는 스코프와 실행 순서 관리를 구현한 내부 메커니즘
  • 렉시컬 환경(식별자와 스코프 관리)
    실행 컨텍스트 스택(코드 실행 순서 관리)
  • 렉시컬 환경 : 식별자와 식별자에 바인딩된 값(환경 레코드; EnvironmentRecord), 그리고 상위 스코프에 대한 참조를 기록(외부 렉시컬 환경에 대한 참조; OuterLexicalEnvironmentReference)
  • 전역 코드의 평가 과정
  1. 전역 실행 컨텍스트 생성
  2. 전역 렉시컬 환경 생성
    2.1. 전역 환경 레코드 생성
    2.1.1. 객체 환경 레코드 생성(var)
    2.1.2. 선언적 환경 레코드 생성(let, const)
    2.2. this 바인딩
    2.3. 외부 렉시컬 환경에 대한 참조 결정
  • 스코프 체인의 동작 원리: 식별자 결정을 위해 실행 중인 실행 컨텍스트에서 식별자 검색을 시작하여, 검색되지 않으면 외부 렉시컬 환경에 대한 참조가 가리키는 렉시컬 환경, 즉 상위 스코프로 이동하여 식별자를 검색함
  • 함수 코드 평가 과정 (함수 호출시 시작되며 코드의 제어권 이동)
  1. 함수 실행 컨텍스트 생성
  2. 함수 렉시컬 환경 생성
    2.1. 함수 환경 레코드 생성(매개변수, arguments, 함수 내 선언한 지역변수와 중첩함수 등록 및 관리)
    2.2. this 바인딩(함수 호출 방식에 따라 결정)
    2.3. 외부 렉시컬 환경에 대한 참조 결정(함수를 어디에서 호출했는지가 아니라 어디에 정의했는지에 따라 상위 스코프 결정)
  • 실행 컨텍스트 스택에서 실행 컨텍스트가 제거되었다고 해도 렉시컬 환경도 즉시 소멸하지는 않는다. (렉시컬 환경은 실행 컨텍스트 스택에 의해 참조되지만 독립적인 객체이기 때문)
    -> 누군가에 의해 참조되지 않을때 가비지컬렉터에 의해 소멸
  • 실행 컨텍스트와 블록 레벨 스코프 : 블록 레벨 스코프를 따르는 let, const 키워드로 선언한 변수를 포함한 새로운 코드 블록이 실행되면 선언적 환경 레코드를 갖는 렉시컬 환경을 새로 생성하여 기존의 전역 렉시컬 환경을 교체한다. 이때 새롭게 생성된 렉시컬 환경의 외부 렉시컬 환경에 대한 참조는 해당 코드블록 실행 이전의 전역 렉시컬 환경을 가리킨다
profile
기록하기

0개의 댓글