기술이 된 상상
[Javascript]Execution Contexts
Indigo_Pure
2020. 6. 9. 09:15
728x90
반응형
실행 컨텍스트(Execution Contexts)
- 자바스크립트 엔진의 실행 원리
- 실행 가능한 코드가 실행되기 위해 필요한 환경
- 코드 수행 환경에 대한 여러 가지 정보를 가지고 있는 어떤 장치
코드를 실행하기 위해서 자바스크립트 엔진이 알아야하는 정보
- 변수
- 함수 선언
- 변수의 유효범위(Scope)
- this
실행 스택(execution stack)
- LIFO(Last In Frist Out)
실행 컨텍스트는 어떻게 만들어지는가
-
Creation 단계
1) Lexical Environment 생성
2) Variable Environment 생성
-
Execution 단계
1. Creation 단계
Lexical Environment
변수나 함수 등의 식별자를 정의하는 객체
식별자와 참조 혹은 값을 기록하는 Environment Record
와 outer
라는 또 다른 Lexical Environment
를 참조하는 포인터로 구성된다.
-
Environment Record
:- Declarative environment code : function code 에서는 변수와 함수의 선언이 저장되는 영역(function의 arguments 객체 생성(length 포함))
- Object environment code : global code 에서는 window 객체 등의 브라우저 정의 객체와 함께 변수와 함수 선언이 저장되는 영역
-
outer
:
외부Lexical Environment
를 참조하는 포인터로, 중첩된 자바스크립트 코드에서 스코프 탐색을 하기 위해 사용된다. -
this
binding :- global 실행 컨텍스트에서는 global obejct에 this를 바인딩(browser에서는 window 객체)
- function 실행 컨텍스트에서는 function을 호출한 주체에 따라
this
가 바뀐다.- 객체 참조로부터 함수가 호출되었다면 해당 객체가
this
가 된다. - 그렇지 않다면
this
는 global object이거나undefined
(strict mode)이다.
- 객체 참조로부터 함수가 호출되었다면 해당 객체가
Variable Environment(조사 및 학습 필요)
- VariableStatements에 의해 만들어진 초기 변수 상태 값
- 기본 적인 구조는
Lexical Environment
와 같다.
2. Execution 단계
변수 할당이 완료되고 코드가 실행된다.
Lexical Environment
를 통해 변수들이 할당 된다. 이 때 변수 서언 식별자에 따라서 변수가 초기화 된다.
let
, const
은 'uninitialized'로 선언되고 접근되지 않는다.var
로 선언된 변수는 'undefined'로 선언되고 접근 가능하다.
키워드에 따라 다른 이유는 Hoisting의 개념 때문이다.
Hoisting은 var
로 선언된 변수에서만 발생한다.
아래 참고 블로그에서 더 쉽게 이해할 수 있도록 예제가 나와있다.
참고
728x90
반응형