모던자바스크립트 23장 실행 컨텍스트

연호·2022년 12월 30일
0

모던자바스크립트

목록 보기
18/28

실행 컨텍스트

  1. ECMAScript 사양은 소스크드를 4가지 타입으로 구분한다. 전역코드, 함수코드. eval코드, 모듈코드. 모든 소스코드는 실행에 앞서 평가 과정을 거친다. 즉, '소스코드의 평가' 와 '소스코드의 실행' 과정으로 나누어 처리한다. 소스코드 평가 과정을 실행 컨텍스트가 관리하는 스코프에 등록하고, 이 과정이 끝나면 소스코드가 순차적으로 실행된다. 이 결과는 다시 실행 컨텍스트가 관리하는 스코프에 등록된다.

  2. 실행 컨텍스트는 스택자료구조로 관리 된다. 이를 실행 컨텍스트 스택(콜 스택)이라고 부른다.

// 전역 코드를 평가와 실행한다. 여기서는 전역 변수 x와 전역 함수 foo를 전역 실행 컨텍스트에 등록한다.
const x = 1;

// 전역 함수 foo가 호출 되면 전역 코드의 실행은 일시 중단된다. foo 함수 실행 컨텍스트를 생성하고 실행 컨텍스트 스택에 푸시한다. 
// 이때 foo 함수에 지역변수 y 와 중첩함수 bar 가 foo 함수 실행 컨텍스트에 등록된다. y 에 값이 할당되고, 함수 bar를 호출한다.
function foo () {
  const y = 2;
  
// 마찬가지로 foo 함수의 실행은 중단되고, bar 함수 실행 컨텍스트를 생성하고 실행 컨텍스트 스택에 푸시한다.
// 지역변수 z에 값을 할당하고, console.log 메서드를 호출한뒤 종료된다.
  function bar (){
    const z = 3;
    console.log(x + y+ z);
  }

// bar 함수 종료 이후 다시 코드 제어권이 foo 함수로 이동. bar 함수 실행 컨텍스트를 실행 컨텍스트 스택에서 제거한다.
  bar();
}

// foo 함수 종료 이후 다시 전역 코드로 이동. foo 함수 실행 컨텍스트를 실행 컨텍스트에서 제거. 
// 이후 실행할 전역 코드가 남아 있지 않으므로 전역 실행 컨텍스트도 실행 컨텍스트에서 제거.
foo();//6

// 실행 컨텍스트 스택은 코드의 실행 순서를 관리한다.
  1. 렉시컬 환경은 식별자와 식별자에 바인딩된 값, 그리고 상위 스코프에 대한 참조를 기록하는 자료구조로 실행 컨텍스트를 구성하는 컴포넌트다. 렉시컬 환경은 다음과 같이 두 개의 컴포넌트로 구성된다.
    3-1 환경레코드는 스코프에 포함된 식별자를 등록하고 등록된 식별자에 바인딩된 값을 관리하는 저장소다.
    3-2 외부 렉시컬 환경에 대한 참조는 상위 스코프를 가리킨다. 이때 상위 스코프란 외부 렉시컬 환경, 즉 해당 실행 컨텍스트를 생성한 소스코드를 포함하는 상위 코드의 렉시컬 환경을 말한다.
profile
뉴비

0개의 댓글