본문 바로가기

개발에 도움이 되는/JavaScript

실행 컨텍스트(Execution Context)

- 실행 컨텍스트 (Execution Context) : 실행할 코드에 제공할 환경 정보들을 모아놓은 객체

 

자바스크립트는 실행 컨텍스트가 활성화되는 시점에 다음과 같은 현상이 발생한다.

- 호이스팅 발생 (호이스팅이 궁금하다면 보러 가기)

- 외부 환경 정보를 구성

- this 값을 설정

 

실행 컨텍스트를 Call Stack에  쌓는 경우는 아래와 같다.

  1. 전역 코드 : 전역 영역에 존재하는 코드

  2. Eval 코드 : eval 함수로 실행되는 코드 (eval은 현재는 안 쓰는 것을 권장하며, 오히려 evil이라는 소리를 들음)

  3. 함수 코드 : 함수 내에 존재하는 코드

  4. 블록 문 : { } 안에 있는 코드 (ES6 이후)

 

 

- 실행 컨텍스트 구성 

  - Variable Environment : 현재 컨텍스트 내의 식별자(변수)들의 정보와 외부 환경 정보가 들어있음. environmentRecord와 outerEnvironmentReference로 구성되어 있으며, 최초 실행 시의 스냅샷(상태)를 유지한다.

실행 컨텍스트를 생성할 때 Variable Environment에 정보를 먼저 담은 다음, 이를 복사해서 Lexical Environment를 만들고 변경 사항이 반영되지 않는다.

 

  - Lexical Environment :  environmentRecord와 outerEnvironmentReference로 구성되어 있고 처음에는 Variable Environment과 같지만 변경 사항이 실시간으로 반영된다.

 

  - thisBinding : this 식별자가 바라보고 있는 대상 객체

 

 

- environmentRecord : 컨텍스트와 관련된 코드의 식별자 정보들(매개변수 식별자, 함수 자체, 함수 내부의 식별자)이 저장되고 그로 인해 호이스팅 발생

- outerEnvironmentReference : 현재 호출된 함수가 선언될 당시의 Lexical Environment를 참조하는 포인터로 그로 인해 스코프와 스코프 체인이 형성된다.

반응형

'개발에 도움이 되는 > JavaScript' 카테고리의 다른 글

클로저(Closure)  (0) 2022.03.13
스코프(Scope)  (0) 2022.02.27
호이스팅(Hoisting)  (1) 2022.01.05
Node.js  (0) 2022.01.03
JavaScript  (0) 2021.12.26