코어 자바스크립트 - 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.)