작성 전..
=> 실행 컨텍스트는 이전 생활코딩 유튜브의 스코프 부분을 보며 잠시동안 공부한 적이 있었다. 딥다이브 스터디를 계기로 깊게 공부해보게 되었다.
callStack 이라고 불리는 스택에 푸시한다.const x=1;
function foo() {
const y=2;
function bar() {
const z=3;
console.log(x+y+z);
}
bar();
}
foo();
위의 코드는 실행 컨텍스트 스택이 다음과 같이 푸시되고 팝 된다.
1. callStack []
2. callStack [[Global.E.C]]
3. callStack [[Global.E.C],[foo.E.C]]
4. callStack [[Global.E.C],[foo.E.C],[bar.E.C]]
5. callStack [[Global.E.C],[foo.E.C]]
6. callStack [[Global.E.C]]
7. callStack []
8. 종료
=> 실행 컨텍스트는 Lexical Environment 와 Variable Environment 컴포넌트로 구성된다.
렉시컬 환경(Lexical Environment)은 식별자와 식별자에 바인딩 된 값, 그리고 상위 스코프에 대한 참조를 기록하는 자료구조로 실행 컨텍스트를 구성하는 컴포넌트다.
렉시컬 환경(Lexical Environment) 에는 Enverionment Record 와 OuterLexical Environment Reference 두 개의 컴포넌트가 존재한다.
각각, 스코프에 포함된 식별자와 식별자에 바인딩 된 값을 관리하는 저장소, 상위 스코프를 가리킨다. 상위 스코프를 가리킴으로써 외부 렉시컬 환경을 참조하고 이로 인해 단방향 링크드 리스트인 스코프 체인을 구현한다.
Object Environment RecordDeclarative Environment Record[[GlobalThisValue]] 내부 슬롯에 this가 바인딩 된다. 전역 코드에서의 this는 window 전역 객체를 가리키므로 전역 객체가 바인딩 된다.Lexical Environment Record를 덮어쓰고 종료되면 다시 기존 실행 컨텍스트로 돌아간다! 13장 스코프와 24장 클로저를 이해하기 위해 거쳐야 하는 필수 지식인 것 같다.. 공부하면서 JS에 대해 깊게 알수 있어 변태 같지만 너무 행복하다..