본문 바로가기
Java Script

실행 컨텍스트

by 2__50 2023. 10. 27.
공부한 내용을 정리한 글입니다 
내용에 오류가 있거나 더 좋은 의견이 있다면 댓글로 남겨주세요.
배움에 큰 도움이 됩니다. 🖋

 

실행 컨텍스트


 

 

소스코드를 실행하려면 몇가지 재료가 필요하다.
먼저 코드 내에서 사용되는 변수, 함수 등의 식별자를 알아야 하며, 코드를 어떤 순서로 실행할 것인지에 대한 정보도 필요하다.

 

이렇게, 코드가 어떤 식별자를 사용할 수 있는지 실행 순서는 어떻게 되는지를 관리하는 영역이 바로 실행 컨텍스트다.

 

Execution Context Stack : 코드의 실행 순서를 관리한다.
Lexical Environment : 변수, 함수, 클래스 등의 이름인 식별자와 그 식별자를 등록하고 관리하는 scope를 관리한다.

 

 

 

실행 컨텍스트 스택


실행 컨텍스트 중에서 코드의 실행 순서를 관리하는 곳으로,
실행 순서가 스택 구조로 쌓였다 제거되기 때문에 실행 컨텍스트 스택이라 부른다.

 

var x = 100
const y = 200

function sum (n) {
    const x = 50
    const z = 150
    console.log(n + x + y + z)
}

sum(300) //700

 

 

 

Scope



간단하게 말하면 선언 위치에 따라 식별자가 참조하는 범위이고,
좀 더 구체적으로 말하면 현재 실행중인 Execution Context의 Lexical Environment에서 시작해 Outter Lexical Environment Reference(외부 렉시컬 환경 참조)에 대한 참조로 이어지는 렉시컬 환경의 연속이다.

 

 

Scope Chain


 

  • Scope가 계층적으로 연결되어 있는 것이다.
  • Scope Chain은 물리적으로 존재한다.
  • 자신이 속한 계층 위로만 올라가며, Global에서 Sum Scope를 참조하지는 않는다.
    함수가 중첩되면 각 함수의 지역 Scope도 중첩 된다

 

 

Scope Level


  • 블록레벨 : if, for문, 함수, let, const(es6) ...
  • 함수레벨 : var

 

Lexical Environment (렉시컬 환경)


 

Key와 Value로 매칭되는 식별자와 식별자에 할당되는 값, 상위 Scope에 대한 참조를 기록하는 자료구조다.

Execution Context에서 식별자와 Scope를 관리하는 역할을 한다.

 

 

특징

  • Outter Lexical Environment Reference에는 함수가 정의될 당시의 상위 Scope에 대한 참조가 저장된다.
    • 상위 Scope는 함수가 호출된 위치가 아닌 정의된 위치에 따라 결정된다.
  • Lexical Environment는 독립적 공간이기 때문에, 해당 코드의 실행이 끝나 Stack에서 제거되어도 내부 함수에서 환경 안의 값을 참조하고 있다면 제거되지 않는다. 반대로 해당 코드의 실행이 끝나는 시점에서 아무도 환경 안의 값을 참조하고 있지 않다면 가비지 컬렉터에 의해 메모리 공간에서 제거된다.

 

 

 

참고


책 : 모던 자바스크립트 딥다이브

 

모던 자바스크립트 Deep Dive - 예스24

『모던 자바스크립트 Deep Dive』에서는 자바스크립트를 둘러싼 기본 개념을 정확하고 구체적으로 설명하고, 자바스크립트 코드의 동작 원리를 집요하게 파헤친다. 따라서 여러분이 작성한 코드

www.yes24.com

 

댓글