-
Execution Context에 대하여Programming/javascript 2022. 2. 10. 21:10
실행 문맥(EC; Execution Context)는 JS에서 중요한 개념 원리 중 하나로, hoisting, this, scope, closure와 관련된 근본적인 개념이다.
JS의 실행과 흐름 그리고 코드에 대한 정보가 EC를 통하여 관리되기 때문에 이를 이해하는 것이 몹시 중요하다고 할 수 있다.
우선, EC는 자바스크립트 엔진(인터프리터)이 로직으로 짜여진 코드의 함수와 변수, scope와 this 등 정보가 필요한데 이러한 것들이 실행되는 위치를 설명한다는 의미에서 Execution Context라고 한다. JS의 엔진은 EC를 객체로써 관리하며 코드를 EC 객체 내에서 실행 시킨다.
•Call Stack이란, 실행 스택(execution stack), 제어 스택(control stack), 런 타임 스택(run time stack), 기계 스택(machine stack) 등으로 불리우며 Computer Program에서 실행 중인 서브루틴(subroutine)에 대한 정보를 저장하는 Stack Data Structure이다. 이를 사용 하는 목적은 여러가지이지만, 가장 주가 되는 이유는 바로 현재 실행 중인 서브루틴의 종료 시 제어의 반환 지점을 보관하기 위함이다. 현재 Execution Context에서는 생성된 컨텍스트에 대한 관리 목적의 Call Stack이라고 볼 수 있다.
이때, 실행 컨텍스트는 3종류로 나뉘어지는데
•Global Execution Context: 단 한개만 정의 되는 전역 컨텍스트, 전역 객체를 생성하며 this 값이 참조하게 된다. 이는 Call Stack에 가장 먼저 추가되고, 앱이 삭제 되어야 삭제된다.
•Eval Context: eval 함수로 실행한 Context of Code이며, MDN 용어 사전에서 경고하듯 보안 이슈로 인하여 비권장 되는 함수이다.
•Functional Execution Context: 함수 실행 문맥으로써 매 함수가 실행될 경우 정의 된다. GEC와 달리 매번 정의되며 어떠한 이유로든 함수가 종료되면 Call Stack에서 제거된다.
이렇게 생성된 EC들은 종류에 따라서 Global Execution Context는 코드가 실행되는 초반에 Call Stack으로 push되어 보관되고 그 이후 Functional Execution Context를 통하여 함수가 실행 될 때 Call Stack에 Push 혹은 Pop 하여 함수의 반환 지점을 관리한다. 하지만 Call Stack 또한 정해진 Size가 존재하기 때문에 Execution Stack의 크기가 너무 커질 경우 콜 스택의 최대 사이즈를 초과했다는 에러가 발생하는데 이게 유명한 Stack Overflow이니 유의하자.
추가로 읽어보면 좋을 글
•Understanding Execution Context and Execution Stack in Javascript
•What's the difference between "LexicalEnvironment" and "VariableEnvironment" in spec
'Programming > javascript' 카테고리의 다른 글
Generator에 대하여 (0) 2022.04.24 Closure에 대하여 (0) 2022.02.10 일반 함수와 생성자 함수의 차이점 (0) 2022.02.10 function과 arrow function의 차이점 (0) 2022.02.10 var, let, const의 차이점 (0) 2022.02.10