실행 컨텍스트

khsi12345·2020년 9월 8일
0
post-thumbnail

실행 컨텍스트

scope, hoisting, this, function, closure 등의 동작원리를 담고 있는 자바스크립트의 핵심 원리.
실행 가능한 코드를 형상화하고 구분하는 추상적인 개념.
실행 가능한 코드가 실행되기 위해 필요한 환경.

실행 가능한 코드?

전역에 존재하는 코드, 함수 내에 존재하는 코드

자바스크립트 엔진은 코드를 실행하기 위하여 실행해 필요한 여러가지 정보를 알고 있어야 한다.

여러가지 정보 중에 위에서 말한 핵심원리 등이 포함되어 있는데,
1. 전역 변수, 지역 변수, 매개변수, 객체의 프로퍼티
2. 함수 선언
3. 변수의 유효 범위(scope)
4. this
이렇게 4가지로 요약해볼 수 있다.

global EC(전역 실행 컨텍스트, 최상위의 실행 컨텍스트)는 전역 객체를 담고 있다.
애플리케이션이 종료되기 전까지 global EC는 유지된다.
실행 가능한 코드마다 논리적 구조를 가지는 EC를 생성한다.

EC는 객체의 형태를 가지며 3가지의 프로퍼티를 가지고 있다.
1. Variable Object
2. Scope Chain
3. thisValue

Variable Object

EC가 생성되면 자바스크립트 엔진은 실행에 필요한 여러가지 정보들을 담을 Variable Object 객체를 생성한다.
Variable Object는 변수, 매개변수와 인수 정보, 함수 선언식의 정보를 담는다.
Variable Object는 EC의 프로퍼티로서 값을 가지는데 이 값은 EC마다 다른 객체를 가리킨다.
예를 들자면 전역 코드에서 생성되는 EC는 전역 변수, 전역 함수 등을 포함하는 전역 객체를 가리키고, 함수 실행시 생성되는 EC는 활성 객체를 가리키며 배개변수와 인수들의 정보를 배열의 형태로 담고 있는 Arguments Object가 추가된다.

Scope Chain

일종의 리스트로서 전역 객체와 중첩된 함수의 scope 레퍼런스를 차례로 저장하고 있다.
해당 전역 또는 함수가 참조할 수 있는 변수, 함수 선언 등의 정보를 담고 있는 전역 객체 또는 활성 객체의 리스트를 가리킨다.
변수를 검색하는 메커니즘이다. (객체의 프로퍼티를 검색하는 메커니즘은 Prototype Chain이다.)
자바스크립트 엔진은 Scope Chain을 통해 렉시컬 스코프를 파악한다.
함수가 중첩 상태일 때 내부함수에서 상위 함수의 스코프와 전역 스코프까지 참조할 수 있는것은 Scope Chain을 통해서 가능한것이다.

this

this 프로퍼티에는 this 값이 할당된다.
this에 할당되는 값은 함수 호출 패턴에 의해 결정된다.
(함수 호출 패턴에 의해 값이 결정되어 할당되기 전에는 전역 객체를 가리키고 있는다.)

this 값이 할당되는 과정을 생각해보자면
EC가 생성되고, Scope Chain이 초기화, Variable Object에 초기화, 마지막으로 this 값이 할당된다.

profile
프론트엔드 개발자. ios 앱, web, 만화(애니메이션)에 관심주기

0개의 댓글