var를 사용하여 지역 변수를 선언하는 대신 const와 let을 사용합니다. 가장 큰 차이점은 var는 함수의 범위를 지정하고 const와 let은 블록의 범위를 지정한다는 것입니다.

또한 const로 선언된 변수는 한 번만 값을 할당할 수 있습니다. 동일한 이름에 다른 값을 할당하면 컴파일러 오류가 발생합니다. const 변수에 할당된 값이 객체 또는 배열인 경우 객체 또는 배열이 여전히 수정될 수 있습니다. 즉, 변수 이름 만 영구적으로 바인딩됩니다. 값 자체는 여전히 변경 가능합니다.

[ const와 let 사용하기 ]

1
2
3
4
5
6
7
8
9
10
11
12
const a = 1
let b = 'foo'

// 허용되지 않습니다!
// a = 2

// Ok!
b = 'bar'

if (true) {
  const a = 3
}

[ 바벨로 컴파일된 코드 ]

1
2
3
4
5
6
7
8
9
10
11
12
var a = 1;
var b = 'foo';

// 허용되지 않습니다!
// a = 2

// Ok!
b = 'bar';

if (true) {
  var _a = 3;
}

컴파일된 결과가 const를 대체하고 var는 let이라는 것을 알 수 있습니다. 또한 Babel은 const a = 3을 var _a = 3으로 변환합니다. 이는 새로운 블록 범위 변수 선언을 지원하지 않는 구형 플랫폼에서 코드를 실행할 수 있도록 하기 위한 것입니다. 런타임 자바스크립트 엔진이 아니라 바벨 컴파일러가 적절한 사용법과 블럭 범위 지정을 시행합니다.