코어 자바스크립트 - 2장
1. 콜 스택
실행할 실행 컨텍스트
들이 순차적으로 쌓이는 곳
2. 실행 컨텍스트
실행할 코드에 제공할 환경 정보를 모아놓은 객체
3. VariableEnvironment
현재 컨텍스트 내의 식별자들에 대한 정보
선언 시점의 외부 환경 정보
최초 실행 시점의 스냅샷을 유지함
VariableEnvironment
을 복사해서 LexicalEnvironment
를 만듦
내부는 environmentRecord
와 outer-EnvironmentReference
로 구성되어 있음
4. LexicalEnvironment
처음에는 VariableEnvironment
와 같지만 변경 사항이 실시간으로 반영됨
내부는 environmentRecord
와 outer-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
Author And Source
이 문제에 관하여(코어 자바스크립트 - 2장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@1-blue/코어-자바스크립트-2장저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)