코어 자바스크립트 - 2장

1. 콜 스택

실행할 실행 컨텍스트들이 순차적으로 쌓이는 곳

2. 실행 컨텍스트

실행할 코드에 제공할 환경 정보를 모아놓은 객체

3. VariableEnvironment

현재 컨텍스트 내의 식별자들에 대한 정보
선언 시점의 외부 환경 정보
최초 실행 시점의 스냅샷을 유지함
VariableEnvironment을 복사해서 LexicalEnvironment를 만듦
내부는 environmentRecordouter-EnvironmentReference로 구성되어 있음

4. LexicalEnvironment

처음에는 VariableEnvironment와 같지만 변경 사항이 실시간으로 반영됨
내부는 environmentRecordouter-EnvironmentReference로 구성되어 있음

5. thisBinding

현재 실행 컨텍스트this값을 정함

6. environmentRecord

  • 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장된다.
    1. 매개변수 식별자
    2. 선언한 함수
    3. var를 이용해 선언한 변수의 식별자

실행 컨텍스트콜 스택에 담겨서 실행되기 전에 코드를 평가하여 environmentRecord에 식별자를 수집합니다. ( 호이스팅 )

7. outer-EnvironmentReference

현재 함수가 선언될 당시LexicalEnvironment를 참조한다. ( 호출X, 선언O )

실행 컨텍스트마다 outer-EnvironmentReference의 값이 지정되면 각각의 outer-EnvironmentReference을 통해 항상 전역 실행 컨텍스트에 접근할 수 있다.
이렇게 outer-EnvironmentReference를 이어가는 것을 스코프체인이라고 부름

특정 실행 컨텍스트에서 변수를 찾을 때는 스코프체인중 가장 먼저 발견되는 변수를 찾음

const funcX = () => {
  const funcY = () => {
    const funcZ = () => {
      
    }
  }
}
funcX();

// funcX의 LexicalEnvironment는 전역  LexicalEnvironment
// funcY의 LexicalEnvironment는 funcX LexicalEnvironment
// funcZ의 LexicalEnvironment는 funcY LexicalEnvironment

const funcX = () => {
  funcY();
}

const funcY = () => {
  const funcZ = () => {
    
  }
}
funcX();

// funcX의 LexicalEnvironment는 전역  LexicalEnvironment
// funcY의 LexicalEnvironment는 전역 LexicalEnvironment ( 선언 시점에는 전역적으로 선언됨 )
// funcZ의 LexicalEnvironment는 funcY LexicalEnvironment

좋은 웹페이지 즐겨찾기