let, const는 var의 아래 문제를 해결하기 위해 등장했다.
따라서 let, const의 특징은 아래와 같다.
변수 중복 선언 금지
블록 레벨 스코프({})
변수 호이스팅 문제 해결

let, const도 호이스팅은 되지만, 초기화 이전의 단계에 TDZ에 들어가 변수를 참조할 수 없게 만든다. 즉, 호이스팅은 되지만, 쓸 수는 없게 하는 것
하지만 아래 예시와 같이 블록 내부에서 호이스팅이 발생하기 때문에 아래와 같은 예시에서 호이스팅으로 인해 Reference Error가 발생하는 사례를 볼 수 있다.
let foo = 1; // 전역 변수
{
console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
let foo = 2; // 지역 변수
}
전역 환경에서 전역 객체의 프로퍼티로 들어가지 않음
const는 재할당이 금지된다. 하지만 이것이 “불변”을 의미하지는 않는다. const로 선언한 객체는 동적 생성, 삭제, 프로퍼티 값으 변경을 통해 객체를 변경하는 것은 가능하다.