execution context
실행 컨텍스트
실행 컨텍스트는 자바스크립트의 동작 원리를 담고 있는 핵심 개념입니다.
실행 컨텍스트란?
실행 컨텍스트는 소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역입니다. 좀 더 구체적으로 실행 컨텍스트는 식별자(변수, 함수, 클래스 ...)를 등록하고 관리하는 스코프와 코드 실행 순서 관리를 구현한 내부 메커니즘으로 모든 코드는 실행 컨텍스트를 통해 실행되고 관리됩니다. 식별자와 스코프는 렉시컬 환경으로 관리하고 코드 실행 순서는 실행 컨텍스트 스택으로 관리합니다.
소스코드 -> 코드 평가 -> 실행 컨텍스트(런타임)
소스코드의 타입
4가지의 소스 코드가 각자의 독립된 실행 컨텍스트를 생성합니다.
global code: 전역에 존재하는 소스 코드
function code: 함수 내부에 존재하는 소스 코드
eval code: eval 함수에 인수로 전달되어 실행되는 소스코드
module code: 모듈 내부에 존재하는 소스 코드
실행 컨텍스트 스택
stack은 마지막에 넣은 element가 가장 먼저 제거되는(pop) 자료구조입니다. 따라서 실행 컨텍스트도 그렇게 동작합니다. 제일 먼저 전역 코드를 평가하고 전역 실행 컨텍스트를 만들어 스택에 push합니다. 그렇게 실행하다가 다른 소스코드를 만나면 새로운 그 소스코드의 실행 컨텍스트를 만들고 스택에 push합니다. 이 때, 다른 소스코드가 먼저 실행 완료하고 pop된 뒤, 전역 컨텍스트를 마저 실행해 나갑니다.
렉시컬 환경
lexical environment는 식별자와, 식별자에 바인딩된 값, 그리고 상위 스코프에 대한 참조를 기록하는 자료구조 입니다. 렉시컬 환경은 두 개의 컴포넌트로 구성됩니다.
Environment Record(환경 레코드): 스코프에 포함된 식별자를 등록하고 등록된 식별자에 바인딩된 값을 관리하는 저장소
Outer Lexical Environment Reference(외부 렉시컬 환경에 대한 참조): 상위 스코프를 가리킵니다. 해당 실행 컨텍스트를 생성한 소스코드를 포함하는 상위 코드의 렉시컬 환경. 스코프 체인.
과정
전역 객체 생성
-전역 객체는 전역 코드가 평가되기 이전에 생성됩니다. 빌트인 전역 프로퍼티, 빌트인 전역 함수, 표준 빌트인 객체, 동작환경에 따른 api들(Web api, 호스트 객체 등..) 전역 객체도 Object.prototype을 상속받습니다.
전역 코드 평가
전역 실행 컨텍스트 생성 비어 있는 전역 실행 컨텍스트를 생성하여 실행 컨텍스트 스택에 푸
전역 렉시컬 환경 생성 전역 렉시컬 환경을 생성하고 전역 실행 컨텍스트에 바인딩
전역 환경 레코드 생성
객체 환경 레코드 생성
선언적 환경 레코드 생성
this 바인딩
외부 렉시컬 환경에 대한 참조 결정
Last updated