ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 23 실행 컨텍스트
    모던 자바스크립트 딥 다이브 독학 2023. 10. 20. 07:47

    자바스크립트의 동작 원리를 담고 있는 핵심 개념

    소스코드의 타입

    • 전역 코드 - 전역에 존재하는 소스코드
    • 함수 코드 - 함수 내부에 존재하는 소스코드(함수 내부에 중첩된 함수, 클래스 등은 미포함)
    • eval 코드 - 빌트인 전역 함수인 eval 함수에 인수로 전달되어 실행되는 소스코드
    • 모듈 코드 - 모듈 내부에 존재하는 소스코드(모듈 내부 함수, 클래스 등은 미포함)

    소스코드의 평가와 실행

    • 자바스크립트 엔진은 소스코드를 소스코드의 평가와 소스코드의 실행 과정으로 나누어 처리한다.
    • 소스코드 평가 과정: 실행 컨텍스트를 생성, 변수, 함수 등의 선언문만 먼저 실행, 생성된 변수나 함수 식별자를 키로 실행 컨텍스트가 관리하는 스코프에 등록
    • 소스코드 실행: 런타임 시작. 소스코드 실행에 필요한 정보, 변수나 함수의 참조를 실행 컨텍스트가 관리하는 스코프에서 검색해서 취득. 변수 값의 변경 등 소스코드의 실행 결과는 다시 실행 컨텍스트가 관리하는 스코프에 등록

    실행 컨텍스트의 역할

    소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역!

    식별자(변수, 함수, 클래스 등의 이름)를 등록하고 관리하는 스코프와 코드 실행 순서 관리를 구현한 내부 매커니즘으로, 모든 코드는 실행 컨텍스트를 통해 실행되고 관리된다!

    렉시컬 환경(식별자, 스코프)

    실행 컨텍스트 스택(코드 실행 순서)

    • 전역 코드 평가: 선언문만 먼저 실행
    • 전역 코드 실행: 런타임 시작 → 전역 변수에 값이 할당됨, 함수 호출
    • 함수 코드 평가: 매개변수, 지역 변수 선언문 먼저 실행 → arguments 객체, this 바인딩 결정
    • 함수 코드 실행: 런타임 시작 → 함수 코드 실행 종료 → 함수 호출 이전으로 가서 전역 코드 실행

    실행 컨텍스트 스택

    자료구조로 관리된다. 코드의 실행 순서를 관리한다.

    실행 컨텍스트 스택의 최상위에 존재하는 실행 컨텍스트는 언제나 현재 실행중인 코드의 실행 컨텍스트다!

    • 전역 코드의 평가와 실행
    • 첫번째 함수 코드의 평가와 실행
    • 두번째 함수 코드의 평가와 실행
    • 첫번째 함수 코드로 복귀
    • 전역 코드로 복귀

    렉시컬 환경

    식별자, 식별자에 바인딩 된 값, 상위 스코프에 대한 참조를 기록하는 자료구조

    • 환경 레코드(식별자 등록, 등록된 식별자에 바인딩된 값을 관리하는 저장소)
    • 외부 렉시컬 환경에 대한 참조(상위 스코프를 가리킨다. 단방향 링크드 리스트인 스코프 체인 구현)

    실행 컨텍스트의 생성, 식별자 검색 과정

    • 전역 객체 생성

    • 전역 코드 평가

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

      2. 전역 렉시컬 환경 생성

        2.1. 전역 환경 레코드 생성

        2.1.1. 객체 환경 레코드 생성

        2.1.2. 선언적 환경 레코드 생성

        2.2. this 바인딩

        2.3. 외부 렉시컬 환경에 대한 참조 결정

    • 전역 코드 실행

    • 첫번째 함수 코드 평가(첫 번째 함수 호출)

      1. 함수 실행 컨텍스트 생성

      2. 함수 렉시컬 환경 생성

        2.1. 함수 환경 레코드 생성

        2.2. this 바인딩

        2.3. 외부 렉시컬 환경에 대한 참조 결정

    • 첫번째 함수 코드 실행

    • 두번째 함수 코드 평가(두 번째 함수 호출)

    • 두번째 함수 코드 실행

    • 두번째 함수 코드 실행 종료

    • 첫번째 함수 코드 실행 종료

    • 전역 코드 실행 종료

    실행 컨텍스트, 블록 레벨 스코프

    블록 레벨 스코프를 생성하는 모든 블록문은 코드 블록의 실행이 종료되면 코드 블록이 실행되기 이전의 렉시컬 환경으로 되돌린다. 만약 for문의 코드 블록 내에서 정의된 함수가 있다면 이 함수의 상위 스코프는 for 문의 코드 블록이 생성한 렉시컬 환경이다.

    '모던 자바스크립트 딥 다이브 독학' 카테고리의 다른 글

    25 클래스  (0) 2023.10.27
    24 클로저  (0) 2023.10.25
    22 this  (0) 2023.10.19
    21 빌트인 객체  (0) 2023.10.18
    20 Strict Mode  (0) 2023.10.17
Designed by Tistory.