본문 바로가기
카테고리 없음

JavaScript - 실행 컨텍스트

by 랄라J 2022. 10. 9.

아래 내용은 모던 자바스크립트 Deep Dive 23 챕터 실행 컨텍스트를 읽고 정리한 내용입니다.

 

Keyword 1. 실행 컨텍스트

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

- 식별자를 등록하고 관리하는 스코프와 코드 실행 순서 관리를 구현한 내부 메커니즘

  - 실행 컨텍스트의 렉시컬 환경 : 식별자와 스코프 관리. 식별자와 식별자에 바인딩 된 값, 상위 스코프에 대한 참조를 기록하는 자료구조. 실행 컨텍스트를 관리하는 컴포넌트

  - 실행 컨텍스트의 스택 : 코드의 실행 순서 관리, 코드 실행되는 흐름에 따라 실행 컨텍스트 스택에는 실행 컨택스트가 추가되고 제거됨

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

- 모든 코드는 실행 컨텍스트를 통해 실행되고 관리됨

 

소스코드의 타입

ECMAScript 사양은 소스코드를 4가지 타입으로 구분함, 각각의 소스코드는 실행 컨텍스트를 생성

소스코드의 타입에 따라 실행 컨택스트를 생성하는 과정과 관리 내용이 달라 구분함

전역 코드 전역에 존재하는 소스코드
전역에 정의된 함수, 클래스 등의 내부 코드 미포함

전역 변수를 관리하기 위해 최상위 스코프인 전역 스코프를 생성
var 키워드로 선언된 전역변수와 함수 선언문으로 정의된 전역 함수를 전역 객체의 프로퍼티와 메서드로 바인당하고 참조하기 위해 전역 객체와 연결되어야 함
함수 코드 함수 내부에 존재하는 소스코드
함수 내부에 중첩된 함수, 클래스 등의 내부 코드 미포함

지역 스코프 생성
지역 변수, 매개변수, arguments 객체 관리
지역 스코프를 전역 스코프에서 시작하는 스코프 체인의 일원으로 연결
eval 코드 빌트인 전역함수인 eval 함수에 인수로 전달되어 실행되는 소스코드

strict mode에서 독자적인 스코프 생성
모듈 코드 모듈 내부에 존재하는 소스코드
모듈 내부의 함수, 클래스 등의 내부코드 미포함

모듈별로 독립적인 모듈 스코프 생성

 

자바스크립트 엔진은 소스코드를 2개의 과정(소스코드 평가, 소스코드의 실행)으로 나눠 처리함

평가 과정 : 실행 컨텍스트 생성. 변수, 함수 등의 선언문만 먼저 실행하며 생성된 변수나 함수 식별자를 키로 실행 컨텍스트가 관리하는 스코프에 등록

실행 과정 : 선언문을 제외한 소스코드가 순차적으로 실행(런타임). 소스코드 실행에 필요한 정보는 실행 컨텍스트가 관리하는 스코프에서 검색해 취득. 실행 결과는 실행 컨텍스트가 관리하는 스코프에 등록

 

실행 컨텍스트 예시

var x = 1;
const y = 2;

function foo (a) {
    var x = 3;
    const y = 4;
    
    function bar (b) {
    	const z = 5;
        console.log(a+b+x+y+z);
    }
    bar(10);
}
foo(20);

- OuterLexicalEnvironment : 상위 스코프 관리

- this 바인딩 : [[GlobalThisValue]], [[ThisValue]]로 Lexical Environment 내 Environment Record에 기록

 

실행 컨텍스트를 이해하면 알게 되는 4가지

1. 자바스크립트가 스코프를 기반으로 식별자와 식별자에 바인딩된 값을 관리하는 방식

각각의 소스코드에 따라 실행 컨텍스트로 관리

 

2. 호이스팅이 발생하는 이유

Binding Object는 전역 객체 생성에서 생성된 전역 객체.

전역 코드 평가 과정에서 var 키워드로 선언한 전역 변수와 함수 선언문으로 정의된 전역 함수는 전역 환경 레코드의 객체 환경 레코드에 연결된 Binding Object를 통해 전역 객체의 프로퍼티와 메서드가 됨 -> var 키워드로 선언된 전역 변수와 함수 선언문의 정의된 전역 함수가 전역 객체의 프로퍼티와 메서드가 되고 전역 객체를 가리키는 식별자(window) 없이 전역 객체의 프로퍼티를 참조할 수 있는 메커니즘

이것이 var 키워드로 선언한 변수는 코드 실행 단계에서 변수 선언문 이전에도 참조할 수 있는 이유

 

3. 클로저의 동작 방식

실행 컨텍스트 스택에서 bar 함수 실행 컨텍스트가 제거되었다고 해서 bar 함수 렉시컬 환경까지 소멸되는 없이 아님. 렉시컬 환경은 실행 컨텍스트에 의해 참조되기는 하지만 독립적인 객체. 객체를 포함한 모든 값은 누군가에 의해 참조되지 않을 때 비로소 가비지 컬렉터에 의해 메모리 공간의 확보가 해제되어 소멸함

 

4. 태스크 큐와 함께 동작하는 이벤트 핸들러와 비동기 처리의 동작 방식


전역 객체 : 전역 코드 평가전에 생성됨. 빌트인 전역 프로퍼티, 빌트인 전역 함수, 표준 빌트인 객체가 포함되며 동작 환경에 따라 WebAPI 또는 특정 환경을 위한 호스트 객체를 포함함. Object.prototype 상속 받음 프로토타입 체인의 일원

반응형

댓글