[TIL] 실행컨텍스트

welcome·2021년 10월 14일
0
post-thumbnail

💚💗 본문 내용은 코어자바스크립트를 참고하였습니다.


실행컨텍스트란?


실행할 코드에 제공할 환경 정보들을 모아놓은 객체로, 자바스크립트의 동적 언어로서의 성격을 가장 잘 파악할수 있는 개념입니다.

스택과 큐


  • 스택은 출입구가 하나 뿐인 깊은 우물 같은 데이터 구조로 가장 마지막에 저장한 것을 가장 먼저 꺼내게 된다.

  • 는 양쪽이 모두 열려있는 파이프형태의 데이터 구조로 가장 처음 저장한 것을 가장 먼저 꺼내게 되는 구조이다.

실행컨텍스트는 동일한 환경에 있는 코드들을 실행할 때 필요한 환경정보들을 모아 컨텍스트를 구성하고, 이를콜스택 구조로 데이터를 저장하고 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 저넻 코드의 환경과 순서를 보장한다.

여기서 동일한 환경, 즉 실행컨텍스트를 구성할 수 있는 방법으로 전역공간, eval() 함수, 함수 등이 있습니다.

자동으로 생성되는 전역공간을 제외하면 함수를 실행하는 것이 가장 일반적인 실행 컨텍스트를 구성하는 방법 입니다.

실행컨텍스트에 담기는 정보들


1. variableEnvironment

  • LexicalEnvironment 와 같지만 최초 실행시의 스냅샷을 유지한다.

2. LexicalEnvironment

  • 컨텍스트를 구성하는 환경 정보들을 사전에서 접하는 느낌으로 모아 놓은 것
    (코드진행에 따라 달라짐)

2.1 environmentRecord

  • 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다.
    컨텍스트 내부 전체를 처음부터 끝까지 쭉 훑어나가며 순서대로 수집합니다.
    (매개변수명, 변수의 식별자, 선언한 함수의 함수명)
  • 변수 정보를 수집하는 과정을 모두 마쳤더라도 아직 실행컨텍스트가 관여할 코드들은 실행되기 전의 상태입니다. 코드가 실행되기 전임에도 불구하고 자바스크립트 엔진은 이미 해당 환경에 속한 코드의 변수명들을 모두 알고 있게 된다.
    이러한 특징때문에 호이스팅이라는 개념이 등장하게 되는데 호이스팅은 이후에 따로 기록해 보겠다.

2.2 outerEnvironmentReference

  • 스코프란 식별자에 대한 유효범위 이다. 또한 식별자의 유효범위를 안에서부터 바깥으로 차례로 검색해나가는 것을 스코프 체인이라고 하는데 이를 가능하게 하는 것이 outerEnvironmentReference 이다.

스코프체인(scope chain)

식별자의 유효범위를 안에서부터 바깥으로 차례로 검색해나가는 것
outerEnvironmentReference는 현재 호출된 함수가 선언될 당시의 LexicalEnvironment를 참조한다.
선언시점의 렉시컬 환경을 계속 찾아 올라가면 마지막엔 전역 컨텍스트의 렉시컬 환경이 있다.
가장 가까운 요소부터 차례대로만 접근할 수 있으며 다른순서로 접근하는 것은 불가능 하다. 이러한 특성때문에 여러 스코프에서 동일한 식별자를 선언한 경우에는 무조건 스코프 체인 상에서 가장 먼저 발견되 식별자에만 접근할수 있다.
전역컨텍스트에서는 전역스코프에서 생성된 식별자에만 접근 할수있다.

3. ThisBinding


this로 지정된 객체가 저장 되며, 실행 컨텍스트 활성화 당시에 this 지정되지 않은 경우에는 전역객체가 저장되며 그 밖에는 함수를 호출하는 방법에따라 this에 저장되는 대상이 다릅니다.

0개의 댓글