Javascript에서는 var, let, const의 변수 선언 키워드를 이용해 변수를 선언한다. var과 let의 경우는 실행 컨텍스트 내에서 값의 변경이 가능하지만 const의 경우에는 불가능하다.
그런데 다음과 같은 코드를 본 적이 있을 것이다.
const obj={}
obj.age=20
const arr=[]
arr[3]=3
const 키워드를 사용하면 변경이 불가능한 것 아닌가?
위와 같은 코드 작성이 가능한 이유는 obj와 arr이 객체이기 때문이다.
변수 선언 키워드를 통해 변수에 할당하면 변수에는 값이 저장된다. 이 값이란 원시 타입에서는 실제 값, 객체 타입에서는 참조 값에 해당한다. 변경 불가능한 것은 변수가 아니라 '값'이다.
const name='wonji'의 값을 변경한다고 해보겠다. 메모리에 저장된 값은 'wonji'이고 const는 재할당이 불가능하기 때문에 에러가 발생할 것이다.
const obj={}의 경우 메모리에 저장된 값은 obj의 값이 아니라 생성된 객체가 저장된 메모리 공간의 주소가 저장된다. 객체의 내용이 바뀌어도 객체의 메모리 공간의 주소는 변하지 않는다.
따라서 const 키워드를 사용하더라도 변수 자체를 재선언하지 않는 이상 그 내용은 변경 가능하다.
const는 재할당을 방지할 수 있으며 이를 명확하게 드러낼 수 있는 키워드이다. 우리 모두 좋은 코드를 작성하기 위해 사소한 것부터 신경쓰는 것이 좋겠다.
var : 변수 중복 선언 가능, 함수레벨 스코프, 변수 호이스팅(선언과 동시에 undefined로 초기화)
let : 중복 선언 금지, 블록레벨 스코프, 변수 호이스팅(선언과 초기화가 분리되어 진행, 초기화x시 참조 에러)
const : 중복 선언 금지, 블록레벨 스코프, 변수 호이스팅(선언과 동시에 초기화 필수), 재할당 금지