JavaScript/실행컨텍스트

[JavaScript] 실행컨텍스트(Excution Context), 스코프체인, Variable Object

반응형

실행컨텍스트란(Execution Context)

실행컨텍스트란 실행 가능한 코드를 형상화하고 구분하는 추상적인 개념이다.
실행 가능한 코드가 실행되기 위해 필요한 환경이다.

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

  • 변수: 전역변수, 지역변수, 매개변수, 객체의 프로퍼티
  • 함수 선언
  • 변수의 유효범위(Scope)
  • this

가장 먼저 자바스크립트 코드가 실행되게 되면 실행컨텍스트 스택에 GEC (Global Execution Context)가 가장 아래에 놓이게된다.
그 후 코드를 읽어가며 실행가능한 함수를 만나게 되고 그 함수를 실행하게 되면 FEC(Function Execution Context)가 GEC 위에 쌓이게 된다.

이렇게 계속 외부함수에서 내부함수를 실행할수록 실행 컨텍스트 스택에 점층적(LIFO: Last In First Out, 후입선출)으로 쌓이게 되는 것이다.
그 후 함수의 역활이 끝나고 return을 하게 된다면 해당 함수의 실행 컨텍스트를 파기하고 직전의 컨텍스트로 돌아간다.

 

실행컨텍스트의 초기 객체 3가지

실행컨텍스트에는 GEC, FEC할 것 없이 기본적으로 3가지의 proferty를 지니고 있다.

  • Variable Object(변수 객체)
    • 변수(variable)
    • 매개변수(parameter, 인수를 할당받는 변수), 인수(argument, 함수를 선얼할 때의 할당되는 실질적인 값)
    • 함수선언(함수 표현식은 제외)
  • this: 함수의 호출환경
  • Scope Chain : 활성화 되어있는 함수 객체에서부터 전역 객체까지의 리스트

GECVO(Variable Object) 에는 Global 환경에서 실행, 선언된 전역변수, 전연함수를 가지고 있다.

 

그러나 FEC 에서는 arguments object라는 조금 특별한 객체를 가지고 있다.

arguments object에는해당 함수의 매개변수(parameter)와 인수(argument)정보를 배열의 형태로 가진다.

Scope Chain(스코프체인)

우선 스코프체인을 알기전에 스코프 에 대해 간략하게 설명하겠다.
스코프 란 '범위'라는 뜻으로 JavaScript에서는 변수에 접근할 수 있는 범위라고 할 수 있다.
스코프 는 크게 2가지의 타입이 있으며 전역(global) 스코프지역(local) 스코프이다.


전역 스코프는 어느 곳에서든지 해당 변수에 접근할 수 있는 스코프를 말하며,
지역 스코프는 해당 지역에서만 접근할 수 있다. 즉 지정된 범위 내에서만 접근할 수 있는 범위이다.

스코프체인이라는 것은 결국 변수에 접근할 수 있는 모든 스코프들이 연결된 리스트 라는 것을 알 수 있다.

 

즉 해당 FEC에 변수 X 에 대한 값이 없더라도 스코프체인에 포함되어 있다면 해당 변수 X 를 참조 할 수 있다.
이 경우 리스트에 담겨있다고 랜덤으로 탐색하는 것이 아니라 스코프 체인에 연결된 순서대로 탐색을 진행한다.

스코프체인의 가장 첫번째 리스트는 현재 활성되어있는 함수객체 이며 가장 마지막 리스트는 전역 객체 를 가리킨다.

브라우저의 경우 windows, Node.js의 경우 global이라고 할 수 있다.

this 프로퍼티

this 프로퍼티에는 this의 값이 할당된다. this값은 함수 호출패턴에 따라 달라진다.

 

변수객체화 실행

1. 스코프체인의 생성

가장 먼저 스코프체인의 생성, 초기화가 이루어 진다.

이 때 스코프체인의 안에는 Global인 경우에는 Global만 담겨있을 것이고 내부함수의 경우에는

내부함수, 외부함수, Global순으로 담겨있을 것이다.

2. 변수처리

- 선언: Variable Object에 변수를 등록한다.
- 초기화: Variable Object에 등록된 변수를 메모리에 할당한다. 이 때 변수의 value는 undefined이다.
- 할당: 메모리에 할당된 변수에 실제값을 할당해준다.

3. this value 결정

this의 초기값은 global이다. 그 후 함수 호출이 이루어 지면 호출패턴에 의해 this의 값이 변경된다.

반응형

'JavaScript > 실행컨텍스트' 카테고리의 다른 글

[JavaScript] 스코프, 렉시컬환경  (0) 2021.11.24