ES2015 - 변수

const, let

1. 블록스코프

es2015에 추가된 변수 타입으로 블록스코프를 따른다. (var : 함수 스코프)

  if (true) {
    var x = 3;
  }
  console.log(x); // 3
  if (true) {
    const y = 3;
  }
  console.log(y); // Uncaught ReferenceError: y is not defined

2. TDZ(Temporal Dead Zone)

  • 기존 var는 호이스팅이라고 사용하는 부분이 더 위에있어도 동작했지만, const와 let은 접근이 불가능하다.
    (function() {
      console.log(x);
      var x = 10;
    })(); // undefined;
    
    (() => {
      console.log(z);
      const z = 10;
    })(); // Uncaught ReferenceError: z is not defined
    
  • 전역 스코프에 선언하더라도 window에 등록되지 않는다.
    var m = 1;
    console.log(window.m); // 1
    const n = 2;
    console.log(window.n); // undefined
    

const와 let의 차이

  • 이름에서 유추하겠지만, const는 한 번 초기화하면 다른 값을 대입할 수 없다. 단, const에 할당된 객체나 배열의 요소를 바꾸는 것은 막지 않습니다. 즉 데이터의 주소값만 고정하는 겁니다.

     const c = [1, 2, 3];
     c[0] = 4;
     c; // [4, 2, 3]
     const d = {name: 'Zero'};
     d.name = 'One';
     d; // {name: 'One'} 
      
    

Comments