[F-Lab 모각코 챌린지 - 37일차] - 2장 실행 컨텍스트(코어 자바스크립트편)

Big One·2023년 6월 16일
0

F-Lab

목록 보기
10/69

실행 컨텍스트란?

실행 컨텍스트는 코드를 실행하는 데 필요한 환경들을 제공하고 코드의 실행결과를 관리하는 영역이다.

소스코드의 타입

전역 코드

전역 코드는 전역 변수를 관리하기 위해 최상위 스코프인 전역 스코프를 생성한다. 전역 코드가 평가되면 전역 실행 컨텍스트가 생성된다.

함수 코드

함수코드는 지역 스코프를 생성하고 지역 변수, 매개변수, arguments 객체를 관리해야한다. 생성한 지역 스코프를 전역 스코프에서 시작하는 스코프 체인의 일원으로 연결한다. 함수 코드가 평가 되면 함수 실행 컨텍스트가 생성된다.

eval 코드

strict mode(엄격 모드) 에서 자신만의 독자적인 스코프를 생성한다. 코드가 평가되면 eval 실행 컨텍스트가 생성된다.

모듈 코드

모듈 코드는 모듈별로 독립적인 모듈 스코프를 생성한다. 평가되면 모듈 실행 컨텍스트가 생성된다.

소스코드의 평가와 실행

소스코드는 무작정 실행되는게 아니라 2개의 과정, 즉 “소스코드의 평가”, “소스코드의 실행” 과정으로 나누어 처리한다.

소스코드 평가

소스코드 평가에서 호이스팅이 일어난다.

소스코드 실행

평가 후 소스코드가 실행된다. 즉 런타임이 일어난다.

실행 컨텍스트의 역할

실행 컨텍스트는 렉시컬 환경(Lexical Environment) 컴포넌트와 VariableEnvironment 컴포넌트로 구성된다.

렉시컬 환경

Lexical Environment 환경은 Environment Record, Outer Lexical Environment Reference 컴포넌트가 있다.

Environment Record(환경 레코드)

환경 레코드는 객체 환경 레코드, 선언적 환경 레코드로 구성되어있다.

객체 환경 레코드

전역 환경 레코드를 구성하는 컴포넌트인 객체 환경 레코드는 BindingObject라고 부르는 객체와 연결된다. BindingObject는 “전역 객체 생성”에서 생성된 전역 객체다.

모든 선언문이 여기에 프로퍼티와 메서드가 된다.

선언적 환경 레코드

let, const 키워드로 선언한 전역 변수는 선언적 환경 레코드에 등록되고 관리된다.

var 키워드로 선언한 전역변수, 함수 선언문으로 정의한 전역 함수 이외의 선언이 여기서 관리된다.

this 바인딩

전역 환경 레코드의 [[GlobalThisValue]] 내부 슬록에 this가 바인딩 된다.

일반적으로 [[thisValue]] 는 함수를 호출 할 때 결정되므로 참조값이 바인딩 된다.

Outer Lexical Environment Reference (외부 렉시컬 환경 참조)

현재 실행 컨텍스트가 정의된 곳 즉, 실행준인 함수가 정의 된 실행 컨텍스트 렉시컬 환경 참조가 할당된다.

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

전역 객체 생성 → 전역 실행 컨텍스트 생성 → 전역 렉시컬 환경 생성 → 전역 환경 레코드 생성(객체 환경 레코드, 선언적 환경 레코드) → this 바인딩 → 외부 렉시컬 환경 참조

값을 참조할 경우 렉시컬 환경의 환경 레코드에서 식별자를 찾고 있을 경우 할당한다.

console.log

console 식별자는 스코프 체인에서 검색한다. 전역 렉시컬 환경의 전역 객체 환경 레코드의 BindingObject를 통해 전역 객체에서 찾을 수 있다.

log 메서드는 console 객체가 직접 소유하는 프로퍼티이다.

profile
이번생은 개발자

0개의 댓글