실행 컨텍스트(excution context)

박정훈·2022년 1월 7일
0

Java Script

목록 보기
1/8

호이스팅 관련 글 들을 보던 중 계속 나오던 실행 컨텍스트가 뭔지 궁금해서 찾아보고 큰 그림을 기억하기 위해 작성합니다.🤔

그래서 실행 컨텍스트가 뭐지?

한줄 요약

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

언제 만들어지는데?

  • 자바스크립트가 실행 될 때 전역 실행 컨텍스트가 생성된다.
  • 함수가 실행될 때 함수 실행 컨텍스트가 만들어진다.

실행 컨텍스트를 구성하는 것들은?

VariableEnvironment

  1. 현재 컨텍스트 내의 식별자들에 대한 정보
  2. 외부 환경 정보
  3. 선언 시점의 snap shot 유지를 목적으로 사용

LexicalEnvironment

  1. 최초의 LexicalEnvironment는 VariableEnvironment를 그대로 복사 해 온 것이다.
  2. 이후 변경 사항은 Variable 이 아닌 LexicalEnvironment 에 반영된다.

ThisBinding

  1. 식별자가 바라봐야 할 대상

Environment를 구성하는건??

VariableEnvironment 과 LexicalEnvironment 는 다시 다음 2개로 구성된다.

1. environmentRecord

현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다. 매개변수명... 변수명... 함수선언...
environmentRecord는 호이스팅과 연관이 되어있다.
컨텍스트 내부 전체를 읽어서 앞서 말한 정보들을 수집하는데, 이 수집이 끝나도 코드는
실행 되기 전이다. 그렇다! 이 말은 즉, JS 엔진은 이미 이 시점에 해당 환경에 속한 변수 명들을 다 알고 있는 것이다!
여기서 호이스팅이란 개념이 나오는 것인데, 이러한 일련의 과정을 쉽게 이해하기 위한 방법으로 추상화한 개념이 선언을 최상단으로 끌어올린 다는 내용의 호이스팅이다.

2. outerEnvironmentReference

outerEnvironmentReference는 scope 와 scope chain과 연관이 되어있다.
scope chain 은 유효범위를 안에서부터 바깥으로 찾아나가는 것을 말한다. 그리고 이것을 가능하게 하는 것이 outerEnvironmentReference다. 현재 호출 된 함수가 선언 될 당시의 LexicalEnvironment를 참조한다.

기타 추가

자바스크립트는 실행 컨텍스트가 활성화 되는 시점에
1. 호이스팅이 발행한다.
2. 외부 환경 정보를 구성한다.
3. this 값을 설정한다.

...

그냥 JS 엔진이 코드를 실행하면 생성되는게 실행 컨텍스트다! 라고만 알고 있었는데 내용을 압축해 봐도 꽤 많은 내용이 있었다. 어쩌다 보니 호이스팅의 민낮을 보게 된 느낌..?
이를 훨씬 디테일하게 정리 해 주신 많은 블로그 들이 있어서 존경스럽고.. 보고 공부 할 수 있음에 감사하다.

profile
그냥 개인적으로 공부한 글들에 불과

0개의 댓글