var let const는 변수와 상수를 선언하는 키워드로 사용됩니다 .
let const는 es6문법으로 블록레벨스코프의 특징을 갖고, 호이스팅은 되지만 TDZ로 인한 초기화에러로 호이스팅이 되지않는걸로 착각 할 수 있습니다.
let은 변수에 재할당이 가능하지만, const의 경우 변수 재선언 재할당 모두 불가능합니다.
var의 경우 함수레벨 스코프이며, TDZ가 발생하지않아 초기화와 선언이 동시에 일어나 메모리는 적재되지만 할당단계가 일어나지않아 undefined로 값을 표현합니다.
TDZ란 ? 일시적으로 특정 변수에 접근할 수 없는 구간으로
스코프의 시작 지점부터 해당 변수의 초기화 시작 지점까지의 구간
TDZ가 발생하면 선언과 초기화단계가 동시에 발생할수 없게됩니다.
TDZ는 JS가 동적언어이다 보니, runtime type check가 필요하여 발생하게 됩니다.