13장, 15장, 23장
var 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언이 허용된다.
이는 의도치 않게 변수값이 재할당되어 변경되는 부직용을 발생시킨다.
하지만 let이나 Const 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언을 허용하지 않는다
<aside> ❗
자바스크립트 엔진이 스코프 체인을 통해 참조할 변수를 검색
</aside>
전역 변수 x 와 함수 내부 x 변수 중, 함수 내부에서 x 변수를 참조하면 전역 변수가 아닌 지역 변수 x를 참조한다.
<aside> ❗
스코프 체인 : 스코프가 계층적으로 연결된 것
변수를 참조할 때 자바스크립트 엔진은 스코프 체인을 통해 변수를 참조하는 코드의 스코프에서 시작하여 상위 스코프 방향으로 이동하며 선언된 변수를 검색한다. ⇒ 상위 스코프에서 유효한 변수는 하위 스코프에서 자유롭게 참조할 수 있지만 반대는 안된다는 것 의미.
</aside>
스코프가 함수의 중첩에 의해 계층적 구조를 갖는다.
외부 함수의 지역 스코프는 중첩 함수의 상위 스코프.