실행 컨텍스트(Execution Context)
ECMAScript에서 실행컨텍스트의 정의를 이렇게 말한다.
'실행 가능한 코드를 형상화하고 구분하는 추상적인 개념'
좀 더 쉽게 설명을 하자면 이렇다.
'함수가 실행될 때 그 함수의 대한 환경 정보들을 모아 메모리에 저장'
실행 컨텍스트는 호이스팅, 스코프, this, 클로저, 함수 등의 동작원리를 담고 있는 자바스크립트의 핵심원리이다.
그러므로 실행 컨텍스트는 확실하게 이해하고 넘어가는 것이 좋다.
콜스택(Call Stack)
자바스크립트 엔진은 실행되는 코드들을 순차적으로 스택에 쌓아 위에서부터 하나씩 처리를 하는
LIFO(Laast In First Out)방식으로 함수들을 실행하게 된다.
실행 컨텍스트의 종류
Global Execution Context(글로벌 실행 컨텍스트)
- 코드가 처음 시작될 당시에 생성되는 글로벌 생성 컨텍스트에는 코드의 글로벌 오브젝트가 담긴다.
Functional Execution Context(함수 실행 컨텍스트)
- 선언된 함수가 호출될 당시에 생기며, 함수의 동작이 끝나면 소멸된다.(이는 클로저를 통해 삭제가 안될 수 도 있다.)
Eval Function Execution Context(Eval 함수 실행 컨텍스트)
- Eval 함수를 통해서 생성이 되는 실행 컨텍스트다.
실행 컨텍스트의 객체
실행 컨텍스트가 생성이 될 때 세가지 정보를 수집하여 저장을 한다.
VariableEnvironment, LexicalEnvironment, ThisBinding
VariableEnvironment, LexicalEnvironment 이 두 개는 처음 생성될 당시에는 똑같은 내용을 담고 있지만,
VariableEnvironment는 초기정보를 그대로 가지고 있는 반면
LexicalEnvironment 는 함수가 실행되는 도중에 발생하는 정보를 실시간으로 변경시켜서 저장을 한다.
ThisBinding은 This에 대한 정보를 담고 있으며 This를 지정하지 않았을 시엔 Global Object 가 저장된다.
VariableEnvironment, LexicalEnvironment는 아래 두가지로 구성이 되어 있다.
environmentRecord / outerEnvironmentReference
environmentRecord 에는 변수, 함수, parameter 와 arguments 등이 담겨져 있고,
outerEnvironmentReference 에는 바로 직전 컨텍스트의 LexicalEnvironment 정보를 가지고 있다.
environmentRecord 를 통해서 호이스팅이 가능하게 되는데 호이스팅은 이전 포스팅에 설명을 해두었다.
outerEnvironmentReference 를 통해서 스코프, 스코프체인 등의 개념들이 활용이 되는데 이는
다음 포스팅에서 다룰 예정이다.
ThisBinding 을 통해 This가 사용이 가능하다.
'JavaScript > JavaScript' 카테고리의 다른 글
[JavaScript] 클로저(closure) 정의 (0) | 2020.08.09 |
---|---|
[JavaScript] 스코프(Scope)는 뭘까? (0) | 2020.08.09 |
[JavaScript] Hoisting은 뭐지? (0) | 2020.08.07 |
[JavaScript] '=='와 '==='의 차이점? (0) | 2020.08.06 |
[JavaScript] ES5 메소드인 map()과 forEach()의 차이점은? (0) | 2020.08.06 |