let, const의 등장

let, const는 var의 아래 문제를 해결하기 위해 등장했다.

  1. 변수 중복 선언 허용
  2. 함수 레벨 스코프
  3. 변수 호이스팅

따라서 let, const의 특징은 아래와 같다.

  1. 변수 중복 선언 금지

  2. 블록 레벨 스코프({})

  3. 변수 호이스팅 문제 해결

    image.png

    let, const도 호이스팅은 되지만, 초기화 이전의 단계에 TDZ에 들어가 변수를 참조할 수 없게 만든다. 즉, 호이스팅은 되지만, 쓸 수는 없게 하는 것

    하지만 아래 예시와 같이 블록 내부에서 호이스팅이 발생하기 때문에 아래와 같은 예시에서 호이스팅으로 인해 Reference Error가 발생하는 사례를 볼 수 있다.

    let foo = 1; // 전역 변수
    
    {
      console.log(foo); // ReferenceError: Cannot access 'foo' before initialization
      let foo = 2; // 지역 변수
    }
    
  4. 전역 환경에서 전역 객체의 프로퍼티로 들어가지 않음

const의 특징

const는 재할당이 금지된다. 하지만 이것이 “불변”을 의미하지는 않는다. const로 선언한 객체는 동적 생성, 삭제, 프로퍼티 값으 변경을 통해 객체를 변경하는 것은 가능하다.