JAVASCRIPT DEEP DIVE 2회독 23장 - 실행 컨텍스트(2)

김명성·2022년 6월 14일
0

함수의 실행 컨텍스트.

전역 코드 평가를 통해 전역 실행 컨텍스트가 생성되고, 전역 코드가 실행 되다가 컨트롤러가 함수의 호출문을 만나 함수가 호출되면, 전역 코드의 실행을 일시 중단하고, 함수 내부로 컨트롤러가 이동한다. 그리고 함수 코드를 평가하기 시작한다.

함수 코드 평가의 순서는 다음과 같다.

  1. 함수 실행 컨텍스트 생성
  2. 함수 렉시컬 환경 생성
    2-1 함수 환경 레코드 생성
    2-2 this 바인딩
    2-3 외부 렉시컬 환경에 대한 참조 결정

함수 코드 평가

함수 실행 컨텍스트 생성

생성된 함수 실행 컨텍스트는 함수 렉시컬 환경이 완성된 다음 실행 컨텍스트 스택에 푸시된다.

함수 실행 컨텍스트가 생성되자마자 실행 컨텍스트 스택에 푸시되는 것이 아니라, 함수의 렉시컬 환경이 완성된 이후에 스택에 푸시된다.

생성된 함수 실행 컨텍스트는 실행 컨텍스트 스택의 최상위인 [실행중인 실행 컨텍스트]가 된다.

함수 렉시컬 환경 생성

함수 실행 컨텍스트가 생성되면, 함수의 렉시컬 환경이 생성되며 현재 함수 실행 컨텍스트에 바인딩된다.

전역 렉시컬 환경과 마찬가지로, 렉시컬 환경은 2개의 컴포넌트로 구성된다.

  • 함수 환경 레코드
  • 외부 환경에 대한 참조

함수 렉시컬 환경의 함수 환경 레코드

매개변수, arguments 객체, 함수 내부의 지역 변수와 중첩 함수를 등록하고 관리한다.

함수 환경 레코드가 생성될 때 this도 바인딩되는데 일반 함수 선언문으로 선언된 함수의 this에는 window(global)이 바인딩된다.

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

외부 렉시컬 환경에 대한 참조에는 함수 정의가 평가된 시점에 실행중인 실행 컨텍스트의 렉시컬 환경의 참조가 할당된다.
함수를 어디서 정의했는지에 따라 상위 스코프가 결정되며 상위 스코프를 기억한다.

실행 중인 실행 컨텍스트의 렉시컬 환경, 즉 함수의 상위 스코프를 함수 객체의 내부 슬롯 [[Environment]]에 저장하며 렉시컬 스코프의 매커니즘이 구현된다.


함수 코드 실행

런타임이 실행되며, 렉시컬 환경에서 관리하는 매개변수에 인수가 할당되고, 변수 할당문이 실행되어 지역 변수에 값이 할당되고 내부 함수가 있다면 호출된다.

이때 식별자 결정을 위해 실행중인 실행 컨텍스트의 렉시컬 환경에서 식별자를 검색하기 실행한다. 없다면 상위 렉시컬 환경으로 이동하여 검색하고 값을 가져온다.

0개의 댓글