자바스크립트 심화 (2)

김주언·2022년 5월 24일

자바스크립트

목록 보기
5/8
  • 함수 호출시 실행컨텍스트에서 동작하는 과정
  • 함수 스코프가 저장하는 정보
  • 호이스팅, 클로저의 컨텍스트 내 동작 원리

5. 실행 컨텍스트

: 자바스크립트 코드를 실행할 때 필요한 정보들을 저장하고 제공하는 환경
스코프의 정보를 저장하는 환경이다. 현재 실행중인 컨텍스트에서 이 컨텍스트와 관련 없는 코드가 실행되면 새로운 컨텍스트가 생성되어 제어권을 가져간다. 이렇게 생성된 컨텍스트들은 실행 컨텍스트 스택 안에 쌓이게 된다.

5.2 실행 컨텍스트 구성요소

  • Lexical Environment (LE)
  • Variable Environment (VE)

위의 두 컴포넌트들은 Environment Records (ER) 형태로 구성되어 있다.

function foo() {
  const a = 1;
  var b = 2;
  console.log(a,b);
}
foo()

Environment Records

ER은 렉시컬 스코프를 기반으로 특정 변수와 함수에 대한 식별자의 정보를 저장한다.
즉, 코드가 실행되면 변수나 함수에 대한 식별자를 선언하고, 코드가 실행될 때마다 선언된 식별자에 값을 할당할 수 있도록 바인딩 하는 것.

모든 ER은 OuterEnv를 가지며, 이 OuterEnv는 상위 렉시컬 스코프에 대한 ER을 참조한다

function foo() {
  var a = 1;
  function bar() {
    console.log(a);		// 1
  }
  bar()
}
foo()

Bar ER은 OuterEnv를 통해 상위 렉스컬 스코프에 대한 Foo ER 참조할 수 있게 된다. 즉 bar 실행 컨텍스트에서 코드가 실행될 때 Bar ER에 a가 없으면 OuterEnv를 통해서 Foo ER에서 a를 찾는 것. 이렇게 OuterEnv를 통해 상위 스코프의 ER에 접근하는 과정을 식별자를 찾을 때까지 반복한다.

  • declarative ER
    : 변수, 상수, 클래스, 모듈, 함수 선언 등 렉시컬 스코프 내에 선언된 식별자들 바인딩
    - module ER : 모듈의 외부 스코프 나타내는 정보를 추가적으로 바인딩한다. import 바인딩 제공
    - function ER
    - binding object 외의 나머지
  • object ER
    : binding object라는 객체의 프로퍼티들을 식별자로 바인딩.
    - binding object는 내장 전역 객체, var, 함수 선언문으로 선언된 객체들에 대한 바인딩을 가진다
    - binding object는 window로 접근하는 전역객체
  • global ER
    - 최상위 전역 스코프에서 선언된 식별자와 전역 객체에 대한 바인딩
    - declarative ER과 object ER의 합성 형태
profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글