JavaScript의 변수 선언 방식
변수는 선언 → 초기화 → 할당 단계에 걸쳐 생성된다.
- 선언: 변수명을 메모리에 연결시키는 것
- 초기화: 값을 저장하기 위한 메모리 공간을 확보하는 것
- 할당: 변수에 값을 저장하는 것
재선언 | 재할당 | 스코프 | |
var | O | O | 함수 레벨 |
let | X | O | 블록 레벨 |
const | X | X | 블록 레벨 |
var
var의 가장 큰 특징은 재선언이 가능하다는 것이다.
var a = 1;
console.log(a) // output: 1
var a = 2;
console.log(a) // output: 2
var a = 3;
console.log(a) // output: 3
같은 변수명으로 여러번 선언이 가능하기 때문에 이미 사용하고 있던 변수를 실수로 재선언 해버린다고 해도 알 수 있는 방법이 없어서 위험하다.
let
let a = 1;
consolel.log(a) // output: 1
let a = 2;
console.log(a) // Uncaught SyntaxError: Identifier 'a' has already been declared
a = 3;
consolel.log(a) // output: 3
2로 재선언을 할 때는 이미 선언이 되었다는 오류가 났지만 3으로 재할당은 가능했다.
const
let a = 1;
consolel.log(a) // output: 1
let a = 2;
console.log(a) // Uncaught SyntaxError: Identifier 'a' has already been declared
a = 3;
consolel.log(a) // Uncaught TypeError: Assignment to constant variable.
재선언을 했을 때도 오류가 나고 3으로 재할당을 할 때도 오류가 나온다. 그런데 원시 값의 재할당은 불가능하지만, 객체는 가능하다.
const player = {
name: "kion",
points: 10,
fat: false,
};
console.log(player);
player.fat = true; // 변수 안에 내용물(속성값)은 바꿀 수 있음
console.log(player);
player = "kion"; // 변수 자체를 바꿀 수는 없음
console.log(player);
player가 const 로 선언되었기 때문에 player 자체(데이터 타입이 object인 것)는 바꿀 수 없다. 하지만 object안에 있는 내용물(속성 값)은 바꿀 수 있다.
사용 시기
const 를 사용하면 의도치 않은 재할당을 방지해 주어서 안전하기 때문에 기본적으로 const를 사용하고, 재할당이 필요한 경우에만 let을 사용하는 것이 좋다고 한다.
또한 var은 이제 거의 사용하지 않는다고 하니 잊어도 좋을듯 하다.