실행 컨텍스트

변진수·2021년 11월 25일
2

실행 컨텍스트란?

실행 컨텍스트는 실행할 코드에 제공할 환경 정보를 모아놓은 객체입니다.

스택과 큐

스택은 출입구가 하나뿐인 우물 같은 데이터 구조입니다. 스택에 저장되는 데이터는 후입선출로 통과합니다.
큐는 출입구가 2개인 데이터 구조입니다. 큐에 저정되는 데이터는 선입선출로 통과합니다.

콜 스택과 실행 컨텍스트

실행 컨텍스트는 스택구조로 저장됩니다. 이를 콜 스택이라고 합니다.
각각의 실행 컨텍스트를 구성하는 방법으로는 전역공간, 함수 등이 있습니다. 전역공간의 환경 정보를 큐의 가장 아래 부분에 쌓습니다. 그리고 생성되는 함수의 환경 정보를 스택 구조로 쌓아 올립니다. 그리고 소멸될때도 마찬가지로 스택 구조로 소멸됩니다.

실행 컨텍스트를 구성하는 요소는 크게 3가지가 있습니다.

  • VariableEnvironment: 실행 컨텍스트가 생성될때 담고 있는 정보를 가지고 있으면 변하지 변하지 않는다.
  • LexicalEnvironment: 처음에는 VariableEnvironment와 같지만 변경 사항이 반영된다.
  • THisBinding: 식별자가 바라봐야할 대상 객체이다.

VariableEnvironment

VariableEnvironment는 최초 실행 시의 스냅샷을 유지합니다. 내부는 LexicalEnvironment와 같은 environmentRecord와 outerEnvironmentReference로 구성되어 있습니다.

LexicalEnvironment

LexicalEnvironment는 실행 컨텍스트 최초 실행시의 스냅샷인 VariableEnvironment에서 변경되는 사항을 반영합니다. 구조는 마찬가지로 environmentRecord와 outerEnvironmentReference로 구성되어 있습니다.

environmentRecord

environmentRecord에는 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장됩니다. 식별자 정보는 매개변수 식별자, 변수 식별자, 함수 선언문 등이 있습니다.

호이스팅

호이스팅은 식별자 정보들이 environmentRecord에 저장되는 것을 말합니다. 코드가 실행되기 전에 식별자들이 environmentRecord에 저장되기 때문에 마치 코드의 최상단으로 끌어 올려진것 같아서 호이스팅됬다고 합니다.
이때 주의할 점은 식별자만 environmentRecord에 저장된다는 것입니다. 선언부만 저장되고 할당 부분은 저장되지 않습니다.

함수 호이스팅

outerEnvironmentReference

스코프

스코프 체인

지역변수와 전역변수

profile
Web Frontend Engineer

0개의 댓글