실행컨텍스트

khsi12345·2020년 10월 11일
0
post-thumbnail

실행 컨텍스트

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

실행 가능한 코드??

전역 코드: 전역 영역에 존재하는 코드.(다른 언어는 메인 함수 호출이 있어야 코드 실행이 가능하다.)
Eval 코드: eval 함수로 실행되는 코드.
함수 코드: 함수 내에 존재하는 코드.

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

여러가지 정보에는

  1. 전역 변수, 지역 변수, 매개변수, 객체의 프로퍼티.
  2. 함수 선언.
  3. 변수의 유효 범위(scope).
  4. this.

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

실행 컨텍스트는 객체의 형태를 가지며 3가지의 프로퍼티를 가진다.

  1. Variable Object.
  2. Scope Chain.
  3. thisValue.

Variable Object

실행 컨텍스트가 생성되면 자바스크립트 엔진은 실행에 필요한 여러가지 정보들을 담을 객체를 생성한다.
이를 Variable Object라고 한다.
변수, 매개변수와 인수 정보, 함수 선언식의 정보를 담는다.

Variable Object는 실행 컨텍스트의 프로퍼티 이기때문에 값을 가지는데 이 값은 다른 객체를 가리킨다.
전역 코드 실행시 생성되는 전역 컨텍스트의 경우와 함수를 실행시 생성되는 함수 컨텍스트의 경우 Variable Object가 가리키는 객체가 다르다.
이유는 전역 코드와 함수 코드의 내용이 다르기 때문이다.
예를 들자면 전역 코드에는 매개변수가 없지만 함수에는 매개변수가 있다.

전역 컨텍스트
Variable Object는 유일하며 최상위에 위치하고 모든 전역 변수, 전역 함수 등을 포함하는 전역 객체(Global Object)를
가리키며 Global Object는 전역에 선언된 전역 변수와 전역 함수를 프로퍼티로 갖는다.

함수 컨텍스트
Variable Object는 Activation Object를 가리키며 매개변수와 인수들의 정보를 배열의 형태로 담고 있는 arguments object가 추가된다.

Scope Chain

일종의 리스트로서 전역 객체와 중첩된 함수의 스코프의 레퍼런스를 차례로 저장하고 있다.
해당 전역 또는 함수가 참조할 수 있는 변수, 함수 선언 등의 정보를 담고 있는 Global Object 또는 Activation Object의
리스트를 가리킨다.

현재 실행 컨텍스트의 Activation Object를 선두로 순차적으로 상위 컨텍스트의 Activation Object를 가리키며 마지막
리스트는 Global Object를 가리킨다.

식별자 중에서 객체의 프로퍼티가 아닌 식별자 즉 변수를 검색하는 메커니즘이다.
객체의 프로퍼티를 검색하는 메커니즘은 Prototype Chain이다.

자바스크립트 엔진은 Scopme Chain을 통해 렉시컬 스코프를 파악한다.
함수가 중첩 상태일 때 내부함수에서 상위 함수의 스코프와 전역 스코프까지 참조할 수 있는것은 Scop Chain을 통해서
가능한것이다.

this Value

this 프로퍼티에는 this 값이 할당된다.
this에 할당되는 값은 함수 호출 패턴에 의해 결정된다.(this는 따로 블로그 작성)

실행 컨텍스트를 바탕으로 다음 3가지가 실행된다.

  1. Scope Chain의 생성과 초기화.
  2. Variable Instantiation 실행.
  3. this Value 결정.

Scope Chain의 생성과 초기화

실행 컨텍스트가 생성된 이후 가장 먼저 실행된다.
이때 Scope Chain은 Global Object의 레퍼런스를 포함하는 리스트가 된다.

Variable Instantiation 실행

Scope Chain의 생성과 초기화가 끝나면 실행된다.
Variable Object에 프로퍼티와 값을 추가하는 것을 의미한다.

함수 코드인 경우 매개변수가 Variable Object의 프로퍼티로, 인수가 값으로 설정된다.
함수 선언(표현식 제외)을 대상으로 함수명이 Variable Object의 프로퍼티로, 생성된 함수 객체가 값으로 설정된다.(함수 호이스팅)
변수 선언을 대상으로 변수명이 Variable Object의 프로퍼티로, undefined가 값으로 설정된다.(변수 호이스팅)

this Value 결정

Variable Instantiation 실행이 끝나면 실행된다.
this Value가 결정되기 이전에 this는 전역 객체를 가리키고 있다가 함수 호출 패턴에 의해 this에 할당되는 값이 결정된다.

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

0개의 댓글

관련 채용 정보