var는 ES6 이전에서 사용되던 변수 선언 방법으로 크나큰 문제가 존재한다.
var로 선언했을때, 호이스팅으로 undefined로 호이스팅이 되면서, 값이 제대로 할당이 되지 않았는데도 문제가 없는것 처럼 보여서 많은 개발자들이 혼란을 겪었던 변수 선언 방법이다.
if(false){
var a = 1;
}
console.log(a)//undefined
이렇게 콘솔에 undefined가 나오면서 값은 제대로 할당이 되지 않았지만, 정상적으로 동작하는것 처럼 보인다. 이러한 문제점 떄문에 나온게 let과 const 이다.
let은 var의 문제점을 해결하기 위해서 나온 ES6에 추가된 변수 선언 방식이다.
let은 모든 부분은 var와 동일하나 호이스팅을 할때 제대로된 변수의 값이 선언이 되지 않았을때 레퍼런스 에러를 출력한다.
if(false){
let a = 1;
}
console.log(a); //Reference Error!!
이렇게 참조 에러가 발생하는것을 확인 할 수있다.
var에서는 호이스팅 시 값이 undefined로 들어가게 되어서 정상적으로 동작되는것 처럼 보이는 것과 다르게 let은 호이스팅때 선언된 값이 없음으로 TDZ에서 Reference Error를 출력해 낸다. 좀더 비교적 개발자들의 실수를 줄여줄수 있는 선언 방식이다.
const도 호이스팅을 할떄 TDZ에서 Reference Error를 출력한다. 하지만 let과의 차어점은 const는 let과 다르게 다른 값으로 변경할 수가 없다.
다른 값으로 변경을 하게 되면 타입 에러를 반환한다.
const a = 1;
a = 2
console.log(a)//Type Error!!
const는 불변한 값 즉 변하지 않는 값으로 사용할때 선언하는 방식이다!