실행컨텍스트란(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 : 활성화 되어있는 함수 객체에서부터 전역 객체까지의 리스트
GEC 의 VO(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 |
---|