JS Deep Dive 0613 23장 실행 컨텍스트

제론·2022년 6월 13일
0

[JS 공부기록] TIL ✨

목록 보기
6/12
post-thumbnail

실행 컨텍스트

  • 실행할 코드에 제공할 관경 정보들을 모아놓은 객체

-> 소스코드 실행에 필요한 정보, 변수나 함수를 실행컨텍스트 내 스코프에서 검색

소스코드에 따라 실행컨텍스트 생성 과정이 달라짐!

  • 전역 코드, 함수 코드, eval 코드, 모듈 코드 실행될 때 각각의 실행 컨텍스트가 구성됨

  • 실행 컨텍스트는 무엇이고 어떤 역할을 하는가!?

    • 모든 코드는 실행 컨텍스트에 의해 실행되고 관리됨

    • 실행 컨텍스트 스택 -> 코드 실행 순서 관리(스택 방식으로)

    • 소스코드 평가 -> 실행 컨텍스트 생성

렉시컬 환경

  • 실행 컨텍스트를 구성하며 스코프와 식별자를 관리

    • 스코프를 구분하여 식별자를 등록 및 관리 하는 저장소 역할

    • 구성

      1. 환경 레코드 -> 스코프 내 식별자와 그에 해당하는 을 관리하는 저장소
      2. 외부 렉시컬 환경에 대한참조 -> 해당 실행 컨텍스트를 포함하는 상위 스코프를 가리킴

전역 코드 평가

  1. 전역 실행 컨텍스트 생성

    • 스택의 최상위 => 현재 실행 중인 실행 컨텍스트
  2. 전역 렉시컬 환경 생성

    • 전역 실행 컨텍스트에 바인딩

    2-1. 전역 환경 레코드 생성

    • 전역 스코프 역할 -> var와 let, const를 구분해줌(var는 전역객체에 바인딩됨)

      2-1-1. 객체 환경 레코드 생성

      • var, 함수 선언문 by BindingObject, 전역 객체의 프로퍼티와 메서드가 됨

      • var -> 선언, 초기화 동시에 진행 -> 전역 객체의 등록됨 -> 코드 실행 전 참조 시 undefined 반환 => 변수 호이스팅 원인

      • function ~ -> 평가할 때 전역 객체로 즉시할당 -> 함수 선언문 이전에 호출O

      2-1-2. 선언적 환경 레코드 생성

      • let, const로 선언한 전역 변수 등록 및 관리
      • let, const -> 전역 객체X instead (개념적인 블록 === 선언적 환경 레코드)에 존재
      • 선언, 초기화가 분리해서 진행됨 -> 초기화(런타임 실행) 전까지 일시적 사각지대에 빠짐 => 똑같이 호이스팅이 진행되지만, 런타임 전까지 참조X

    2-2. this 바인딩

    • this 참조할 때 -> 전역 환경 레코드 [[GlobalThisValue]]에서 참조

    2-3. 전역 외부 렉시컬 환경에 대한 참조

    • 상위 스코프 가리킴, 전역 렉시컬 환경은 스코프 체인의 종점 => 참조 null이 할당됨, 식별자가 없을 경우 => type error
profile
Software Developer

0개의 댓글