실행 컨텍스트(execution context)
실행 컨텍스트는 실행할 코드에 제공할 환경 정보들을 모아놓은 객체로, 자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할 수 있는 개념이다. 자바스크립트는 어떤 실행 컨텍스트가 활성화 되는 시점에 선언된 변수를 위로 끌어올리고(호이스팅 (hoisting)), 외부 환경 정보를 구성하고, this 값을 설정하는 등의 동작을 수행하는데, 이로 인해 다른 언어에서는 발견할 수 없는 특이한 현상들이 발생한다.
클로저를 지원하는 대부분의 언어에서 이와 유사하거나 동일한 개념이 있다.
실행 컨텍스트를 정확히 이해하고 넘어가야, 개발자로서 실력 향상에 큰 도움이 될 것이다.
실행 컨텍스트를 살펴보기 전, 스택(stack), 큐(queue) 의 개념을 잠깐 되짚어보려 한다.
스택은 출입구가 하나뿐인 우물 같은 데이터 구조이다. 비어있는 스택에 순서대로
a,b,c,d를 저장 했다면, 꺼낼때는 d,c,b,a 이런식으로 반대로 꺼낼 수 밖에 없다.
d |
c |
b |
a |
한편, 큐는 양쪽이 모두 열려있는 파이프를 생각하면 된다. 종류에 따라 양쪽 모두 입력과 출력이 가능한 큐도 있으나, 보통은 한쪽은 입력만, 한쪽은 출력만 담당하는 구조를 말한다. 큐의 경우 순서대로 데이터 a,b,c,d를 넣었다면,
꺼낼 때도 a,b,c,d 의 순서로 꺼낼 수 밖에 없다.
d | c | b | a |
실행 컨텍스트는 실행할 코드에 제공할 환경 정보들을 모아놓은 객체라고 했다.
동일한 환경에 있는 코드들을 실행할 때, 필요한 환경 정보들을 모아 컨텍스트를 구성하고, 이를 콜 스택(call stack)에 쌓아 올렸다가, 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장한다. 여기서 '동일한 환경' 즉, 하나의 실행 컨텍스트를 구성할 수 있는 방법으로 전역공간,eval() 함수, 함수 등이 있다.
자동으로 생성되는 전역공간과 악마로 취급받는 eval 을 제외하면 우리가 흔히 실행 컨텍스트를 구성하는 방법은
함수를 실행하는 것 뿐이다. es6에서는 블록에 의해서도 새로운 실행 컨텍스트가 실행된다.
'개인공부 > JavaScript' 카테고리의 다른 글
함수 선언문과 함수 표현식 (0) | 2020.08.03 |
---|---|
hoisting(호이스팅) (0) | 2020.08.03 |
undefined & null (0) | 2020.07.29 |
얕은 복사와 깊은 복사 (0) | 2020.07.29 |
변수 복사 비교(기본형, 참조형) (0) | 2020.07.29 |