var 는 함수 스코프를 가진다.
let과 const 는 블록 스코프를 가진다. => 블록안에서만 사용가능.
var는 함수 스코프의 최상단으로 호이스팅되고, 선언과 동시에 undefined로 초기화된다.
let 과 const는 블록스코프 최상단으로 호이스팅되나, 선언만되고 할당되기 전까지는 초기화되지 않는다. => TDZ(Temporal Dead Zone) 즉, 선언은 되었으나 참조할 수 없는 사각지대를 같는다고 한다.
strict모드가 아니라는 가정하에
var는 글로벌 스코프에서 선언되었다면 글로벌객체에 바인딩된다.
let과 const는 글로벌스코프에서 선언되었더라도 글로벌 객체에 바인딩되지 않는다.
또한, var와 let은 재할당이 가능한 반면, const는 재할당이 불가하다.
const 는 선언과 초기화가 반드시 존재해야하며 재할당이 불가하다. => 고정값을 선언 시 사용한다.