실행컨텍스트

2023. 4. 8. 17:31Javascript

실행할 코드에 제공할 환경 정보들을 모아놓은 객체

 

순서

1. 호이스팅이 발생 ( 선언된 변수를 위로 끌어올린다, 함수는 함수 전체가 호이스팅된다 )

2. 외부 환경정보를 구성한다.

3. this 값을 설정한다

 

- 실행 컨텍스트의 전역공간은 자동으로 컨텍스트로 구성이된다.

 

구성할때 생기는 것

- VariableEnvironment : 현재 컨텍스트 내의 식별자(변수)들에 대한 정보, 외부 환경 정보, 선언 시점의 LexicalEnvironment 의 스냅샷(변경사항을 반영하지않는다.)

- LexicalEnvironment : 처음은 위와 같음, 변경사항이 실시간으로 반영된다. environmentRecord와 outerEnvironmentReference로 구성 되어 있고 environmentRecord 로인해 호이스팅이 발생하고, outerEnvironmentReference 로 인해 스코프와 스코프 체인이 형성된다.

- ThisBinding : 식별자가 바라봐야 할 대상 객체

 

Scope

- 식별자에 대한 유효 범위

- JS 는 특이하게 오직 함수에 의해서만 스코프가 생성된다.

 

Scope Chain

- 식별자의 유효범위를 안에서 바깥으로 차례로 검색해 나가는 것

- 이를 가능하게 하는 것이 outerEnvironmentReference

- 여러 스코프에 동일한 식별자를 선언할 경우, 무조건 scope chain 상에서 가장 먼저 발견된 식별자에만 접근 가능하게 된다.

 

this

- 실행 컨텍스트의 thisBinding 에는 this 로 지정된 객체가 저장된다.

 

Summary

  • 실행 컨텍스트는 실행할 코드에 제공할 환경 정보들을 모아놓은 객체이다.
    • 전역 공간에서 자동으로 생성되는 전연 컨텍스트
    • eval함수
    • 함수 실행에 의한 컨텍스트
  • 실행 컨텍스트 객체는 활성화 되는 시점에 VariableEnviroment, LexcialEnvrionment, ThisBinding의 세 가지 정보를 수집한다.
  • 실행 컨텍스트를 생서할 때 VariableEnvironment와 LexicalEnvironment가 동일한 내용으로 구성된다.
  • LexicalEnvironment는 함수 실행 도중에 변경되는 사항이 즉시 반영된다.
  • LexicalEnvironment와 VariableEnvironment는 다음과 environmentRecord와 outerEnvironmentReference로 구성돼 있다.
    • environmentRecord는 매개변수 식별자, 변수 식별자, 선언한 함수의 식별자 등을 수집한다.
      • 이것 때문에 호이스팅이라는 개념이 사용된다.
      • 호이스팅은 코드 해석을 좀 더 수월하게 하기 위해 environmentRecord의 수집 과정을 추상화한 개념이다.
      • 변수 선언부와 함수 선언문에 호이스팅이 발생한다.
      • 함수 표현식을 사용할 경우 함수의 선언부만 호이스팅이 발생한다.
    • outerEnvironmentReference는 상위(직전) 컨텍스트의 LexcicalEnviroment 정보를 참조한다.
      • 이것 때문에 스코프가 형성되고, 스코프 체인을 통해 상위 컨텍스트에 접근할 수 있다.
      • 스코프는 변수의 유효범위를 말한다.

 

참고링크 : https://junilhwang.github.io/TIL/Javascript/Domain/Execution-Context/#_5-this

 

자바스크립트 실행 컨텍스트 | 개발자 황준일

자바스크립트 실행 컨텍스트 실행 컨텍스트는 자바스크립트에서 가장 중요한 핵심 개념 중에 하나다. 이를 정확히 이해하는 것은 자바스크립트 개발자에게 매우 중요하다. 1. 개념 실행 컨텍스

junilhwang.github.io

 

'Javascript' 카테고리의 다른 글

화살표 함수  (0) 2023.04.08
템플릿 문자열 ( 백틱 )  (0) 2023.04.08
프로토타입 (링크)  (0) 2023.04.08
논 블로킹  (0) 2023.04.08
이벤트루프  (0) 2023.04.08