2.2.2 const를 이용한 선언

const를 이용해 재할당이 불가능한 블록 레벨 변수를 선언할 수 있다.

const를 이용해 재할당이 불가능한 블록 레벨 변수를 선언할 수 있다. const를 이용해 선언한 변수의 값을 블록 내에서 재할당하려 하면 에러가 발생한다.

function notOk() {
  const a = 1;
  a = 2;
}
notOk(); // TypeError: Assignment to constant variable.

let과 마찬가지로 const으로 선언한 변수 또한 정의문이 평가되기 전 접근될 경우 ReferenceError를 발생시킨다.

function foo() {
  console.log(a);
  const a = 3;
}
foo(); // ReferenceError: a is not defined

선언 후 재할당이 불가능하단 점에서 짐작할 수 있듯이 const를 이용한 선언은 항상 값의 초기화를 수반해야 한다. var이나 let을 사용할 때처럼 변수를 선언만 해놓은 뒤 그 값을 추후에 초기화하는 것은 불가능하다.

function ok() {
  const a = 3;
  console.log(a);
}
function notOk() {
  const a;
  a = 3;
  console.log(a);
}
ok(); // 3
notOk(); // SyntaxError: Missing initializer in const declaration

const로 선언한 변수는 재할당이 불가능할 뿐, 불변값이 아니라는 점을 명심해야 한다. 예를 들어, ObjectArray 타입의 변수를 const로 정의 했더라도 그 객체의 내부 상태를 조작하는 다양한 수단은 모두 아무런 문제 없이 실행할 수 있다.

const a = 3;
a = 4; // TypeError: Assignment to constant variable.
const obj = {};
obj.a = 42; // OK
const arr = [];
arr.push(3); // OK

const 선언으로 막을 수 있는 것은 오로지 블록 내 값의 재할당 뿐이다.

Last updated