const
, let
, var
… 도대체 뭐가 다른 걸까?
🧩 한눈에 보는 차이표
키워드 | 재할당 가능? | 재선언 가능? | 스코프 | 호이스팅 |
---|---|---|---|---|
const | ❌ 불가능 | ❌ 불가능 | 블록 스코프 | 호이스팅은 되지만 초기화 전 사용 불가 |
let | ✅ 가능 | ❌ 불가능 | 블록 스코프 | 호이스팅은 되지만 초기화 전 사용 불가 |
var | ✅ 가능 | ✅ 가능 | 함수 스코프 | 호이스팅되며, 초기화 전에도 undefined로 접근 가능 |
📌 간단 예제
// const
const a = 10;
a = 20; // ❌ TypeError: Assignment to constant variable
// let
let b = 10;
b = 20; // ✅ OK
// var
var c = 10;
c = 30; // ✅ OK
var c = 50; // ✅ 재선언도 가능
🔍 스코프 차이
if (true) {
var x = 1;
let y = 2;
const z = 3;
}
console.log(x); // ✅ 1
console.log(y); // ❌ ReferenceError
console.log(z); // ❌ ReferenceError
var
는 함수 스코프라서 if문 바깥에서도 접근됨.
let
과const
는 블록 스코프라 해당 블록 밖에선 못 씀.
🚫 호이스팅
console.log(a); // undefined
var a = 10;
console.log(b); // ❌ ReferenceError
let b = 20;
var
는 선언과 초기화가 동시에 끌어올려짐
let
과const
는 선언은 호이스팅되지만 초기화 전엔 사용 불가 (Temporal Dead Zone)
✅ 언제 뭘 써야 할까?
- 값을 바꾸지 않을 변수는 무조건 `const`
- 바뀌는 값은 `let`
- `var`는 이제 쓰지 않는 것이 표준 (옛날 코드 호환용만 예외)
- 바뀌는 값은 `let`
- `var`는 이제 쓰지 않는 것이 표준 (옛날 코드 호환용만 예외)
📌 요약
- `const`는 불변, `let`은 가변, `var`는 이제 과거의 유물
- 안전하고 예측 가능한 코드를 위해선 `const` & `let` 중심으로 쓰자!
- 안전하고 예측 가능한 코드를 위해선 `const` & `let` 중심으로 쓰자!