Var

var x = 1;
if (true) {
	var x = 10;
}

console.log(x) // 10

// 함수문이 아닌곳에서의 var 선언은 전역변수이기 때문에 x는 10으로 재할당.

let

let은’선언’ 과 ‘초기화’ 가 분리되어 진행됨.

런타임 이전에 선언은 먼저 되지만 초기화는 변수 선언문에 도달했을때 초기화됨.

그래서 선언과 초기화 사이의 일시적 사각지대(TDZ) 가 만들어진다.

let은 전역객체의 프로퍼티가 아니고 보이지않는 개념적인 블록이 존재.

const

선언과 초기화를 동시에 해야함.

const foo = 1 

재할당 금지