-
TIL-2024.02.27 - JS - 실행 컨텍스트-4. 렉시컬 환경-3> 기초/Javascript 2024. 2. 27. 22:39
2.1.2 선언적 환경 레코드 생성- let, const 전역 변수는 선언적 환경 레코드에 등록되고 관리.
- let, const 로 선언한 전역 변수는 전역 객체의 프로퍼티가 되지않고, 개념적인 블록 내에 존재하게 되는데. 이를 전역 환경의 선언적 환경 레코드라 함.
2.2. this 바인딩
- 전역 환경 레코드의 내부 슬롯에 this가 바인딩.
- 전역 코드에서 this 는 전역 객체를 가리키므로 전역 환경 레코드의 내부 슬롯에는 전역 객체가 바인딩.
- 전역 코드에서 this를 참조하면 전역 환경 레코드의 내부슬록에 바인딩되어있는 객체가 반환.
2.3. 외부 렉시컬 환경에 대한 참조 결정 (상위 스코프와의 스코프 체인)
- 외부 렉시컬 환경에 대한 참조는 현재 평가 중인 소스코드를 포함함는 외부 소스코드의 렉시컬 환경, 즉 상위 스코프
- 현재 평가 중인 소스코드는 전역 코드다.
3. 전역 코드 실행.
- 변수 할당문이 실행되어 전역 변수 x, y에 값이 그리고 foo 함수가 호출.
- 할당문 혹은 호출문이 실행되려면, 변수 | 함수 이름이 선언된 식별자인지 확인.
- 이 과정에서, 동일한 이름의 식별자가 다른 스코프에 있는지 등을 파악하는데, 어느 스코프의 식별자를 참조하면 되는지 결정하는 것을 식별자 결정이라함
- 식별자 결정을위해 식별자를 검색할 때는 실행중인 실행 컨텍스트에서 식별자를 검색하기 시작하는데, 선언된 식별자는 실행 컨텍스트의 렉시컬 환경의 환경 레코드에 등록.
- 만약 찾을 수 없는 경우 외부 렉시컬 환경에 대한 참조가 가리키는 렉시컬환경, 즉 상위 스코프로 이동하여 찾음.
var x = 1; const y = 2; function foo(a){ var x = 3; const y = 4; function bar(b){ const z = 5; console.log(a + b + x + y + z); // 20 + 10 + 3 + 4 + 5 } bar(10); } foo(20); // 42
예제 설명:
1. 함수 실행 컨텍스트 생성2. 함수 렉시컬 환경 생성
2.1. 함수 환경 레코드 생성
2.2. this 바인딩
2.3. 외부 렉시컬 환경에 대한 참조 결정1. 함수 실행 컨텍스트 생성:
- foo함수 실행 컨텍스트 생성하며, 렉시컬 환경이 완성된 다음, 실행 컨텍스트 스택에 푸시.
- 이때, foo 함수 실행 컨텍스트는 실행 컨텍스트 스택의 최상위, 실행중인 컨텍스트 됨.2. 함수 렉시컬 환경 생성:
-함수 렉시컬 환경을 생성하고 foo 함수 실행 컨텍스트에 바인딩 함
2.1. 함수 환경 레코드 생성:
- 함수 렉시컬 환경을 구성하는 컴포넌트 중 하나인 함수 환경 레코드는 매개변수, 객체, 함수 내부에 선언한 지역 변수와 중첩함수를 등록하고 관리
2.2 this 바인딩:
- foo 함수는 일반 함수로 호출되었기에, this는 전역 객체를 가리킴.
- 함수 환경 레코드 내부 슬롯에는 전역 객체가 바인딩.
2.3 외부 렉시컬 환경에 대한 참조 결정:
- foo 함수 정의가 평가된 시점에 실행 중인 실행 컨텍스트의 렉시컬 환경의 참조가 할당된다.
- 즉, foo 함수 정의는 전역 코드 평가 시점에 평가되는데, 이 시점의 실행 중인 실행 컨텍스트는 전역 실행 컨텍스트이므로, 외부 렉시컬 환경에 대한 참조에는 전역 렉시컬 환경 참조가 할당.3. foo 함수 실행
> 3.1 bar 함수 코드 평가
> 3.2 bar 함수 코드 실행
-3.2.1. console 식별자 검색 (스코프 체인을 통해 전역 렉시컬 환경으로 이동)
-3.2.2. log 메서드 검색
-3.2.3. a + b + x + y + z 평가-3.2.4. a + b + x + y + z 호출
-3.2.5. bar 함수 코드 실행 종료> 3.3. foo 함수 실행 종료
4. 전역 코드 실행 종료'> 기초 > Javascript' 카테고리의 다른 글
TIL-2024.03.22 - JS - Closure (0) 2024.03.22 TIL-2024.03.19 - JS - 이벤트 버블링 & 캡처링 (0) 2024.03.19 TIL-2024.02.26 - JS - 실행 컨텍스트-3. 렉시컬 환경-2 (0) 2024.02.26 TIL-2024.02.25 - JS - MAP과 예제 (1) 2024.02.25 TIL-2024.02.23 - JS - 실행 컨텍스트-2. 실행 컨텍스트 스택과 렉시컬 환경 (0) 2024.02.23