함수 실행 컨텍스트 생성
함수 렉시컬 환경 생성
2.1. 함수 환경 레코드 생성
2.2. this 바인딩
2.3. 외부 렉시컬 환경에 대한 참조
전역 코드 실행된 함수의 외부 렉시켤 환경 참조는 전역 렉시컬 환경의 참조
함수 정의 위치에 따라 상위 스코프 결정됨
함수 평가하고 생성시 [[Environment]]
내부 슬롯이 만들어지는데 이것이 상위 스코프를 나타냄
함수 안에서 호출된 console 식별자는 현재 함수 렉시컬 환경에서 검색X
-> 외부 렉시컬 환경 참조가 가리키는 상위 스코프로 이동하여 검색 결국, 전역 렉시컬 환경까지!
블록 레벨 스코프
전역 코드 평가시에는 블록 레벨 스코프에 따라 환경 레코드를 구분해줘야함. 하지만 함수 코드 평가시에는 그럴 필요 없음 - var, let, const 모두 함수 지역 스코프로 인정
let 변수를 if 문에서 정의했을 때
-> 선언적 환경 레코드를 갖는 렉시컬 환경을 새롭게 생성 기존 렉시컬 환경 대체
-> 코드 블록에 대한 독립적인 렉시컬 환경을 생성 => 클로저 개념으로 이어짐