🔑 키워드 정리
- 실행 컨텍스트 : 자바스크립트의 동작 원리를 담은 핵심 개념. 소스코드를 실행하는 데 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다. 달리 말하면, 식별자를 등록하고 관리하는 스코프와 코드 실행 순서를 구현한 내부 매커니즘을 말한다.
- 렉시컬 환경 : 식별자와 식별장에 바인딩된 값, 그리고 상위 스코프에 대한 참조를 기록하는 자료구조이다. 실행 컨텍스트를 구성하고 있다.
- 소스코드의 종류 : 전역 코드, 함수 코드, eval 코드, 모듈 코드
- 환경 레코드 : 식별자를 등록하고 식별자에 바인딩된 값을 관리하는 저장소
- 외부 렉시컬 환경에 대한 참조 : 상위 스코프. 해당 실행 컨텍스트를 생성한 소스코드를 포함하는 상위 코드의 렉시컬 환경
📗 내용 정리
모든 소스코드는 평가되고 실행하는 2가지의 단계를 거친다.
전역 코드 평가 ➡️ 전역 코드 실행 ➡️ 함수 코드 평가 ➡️ 함수 코드 실행
실행 컨텍스트는 스택 자료구조로 관리된다. 이를 실행 컨텍스트 스택이라고 한다.
실행 컨텍스트 스택은 코드의 실행 순서를 관리하고, 렉시컬 환경은 스코프와 식별자를 관리한다.
전역 코드 평가 과정
전역 실행 컨텍스트 생성 ➡️ 전역 렉시컬 환경 생성 ➡️ 전역 환경 레코드 생성 ➡️ 객체 환경 레코드 생성(*1)
➡️ 선언적 환경 레코드 생성(*2) ➡️ this 바인딩 ➡️ 외부 렉시컬 환경에 대한 참조 결정(*3)
(*1) 객체 환경 레코드 생성에서 BingdingObject를 통해서 var 키워드로 선언한 전역 변수와 함수 선언문으로 정의된 전역 함수를 전역 객체의 프로퍼티와 메서드로 만든다. (*함수 선언문은 전역 객체에 키를 등록할 때 함수 객체를 즉시 할당한다. 그러므로, 함수 선언문 이전에 호출할 수 있다.)
(*2) let, const 킹워드로 선언한 전역 변수를 등록하고 관리한다.
(*3) 전역 렉시컬 환경의 외부 렉시컬 환경에 대한 참조는 없다. null이 할당되어 있다.
함수 코드 평가 과정
함수 실행 컨텍스트 생성 ➡️ 함수 렉시컬 환경 생성 ➡️ 함수 환경 레코드 생성
➡️ this 바인딩 ➡️ 외부 렉시컬 환경에 대한 참조 결정
렉시컬 환경은 실행 컨텍스트와는 독립된 객체다. 실행 컨텍스트에서 foo 함수 실행 컨텍스트가 제거될 때 foo 함수 렉시컬 환경이 즉시 소멸되지는 않는다. 객체와 변수가 모두 참조되지 않을 때 가비지 컬렉터가 동작하고 메모리 공간이 확보된다.
'Today I Learned' 카테고리의 다른 글
모던 자바스크립트 Deep Dive 24장 클로저 (0) | 2022.04.03 |
---|---|
모던 자바스크립트 Deep Dive 22장 this (0) | 2022.03.30 |
모던 자바스크립트 Deep Dive 21장 빌트인 객체 (0) | 2022.03.20 |
모던 자바스크립트 Deep Dive 20장 strict mode (0) | 2022.03.20 |
모던 자바스크립트 Deep Dive 19장 프로토타입 (0) | 2022.03.09 |