2-1 실행 컨텍스트란?

실행할 코드에 제공할 환경 정보들을 모아넣은 객체 ( JavaScript 가 왜 동적 언어인지 성격을 가장 잘 파악할 수 있는 개념 )

동일한 환경에 있는 코드들을 실행할 때 필요한 환경 정보들을 모아 컨텍스트를 구성하고, 이를 콜 스택(call stack) 에 쌓아올렸다가, 가장 위에 쌓여있는 컨텍스트와 관련 있는 코드들을 실행하는 식으로 전체 코드의 환경과 순서를 보장

동일한 환경 = 하나의 실행 컨텍스트를 구성할 수 있는 방법

  • 전역 공간

  • eval() 함수

  • 일반 함수

이 중 우리가 흔히 실행 컨텍스트를 구성하는 방법은 함수를 실행 하는 것


// 예제
// ------------------------------- (1)
var a = 1;
function outer() {
  function inner() {
    console.log(a); // undefined
    var a = 3;
  }
  inner(); // ------------------- (2)
  console.log(a); // 1
}
outer(); // --------------------- (3)
console.log(a); // 1;

(https://raw.githubusercontent.com/inu-appcenter/core-javascript-study/main/ch02/images/2-1-1.avif "그림-1")

실행 컨텍스트가 활성화될 때 자바스크립트 엔진은 해당 컨텍스트에 관련된 코드들을 실행하는 데 필요한 환경 정보들을 수집해서 실행 컨텍스트 객체에 저장

단, 이 객체는 자바스크립트 엔진이 활용할 목적으로 생성할 뿐 개발자가 코드를 통해 확인할 수는 없다.

  • VariableEnviroment 현재 컨텍스트 내의 식별자들에 대한 정보 + 외부 환경 정보 선언 시점의 LexicalEnviroment 의 스냅샷으로, 변경 사항은 반영되지 않음.
  • LexicalEnviroment ** 처음에는 VariableEnviroment 와 같지만 변경 사항이 실시간으로 반영됨.
  • ThisBinding ** this 식별자가 바라봐야 할 대상 객체

results matching ""

    No results matching ""