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문 바깥에서도 접근됨.
letconst는 블록 스코프라 해당 블록 밖에선 못 씀.


🚫 호이스팅

console.log(a); // undefined
var a = 10;

console.log(b); // ❌ ReferenceError
let b = 20;

var는 선언과 초기화가 동시에 끌어올려짐
letconst는 선언은 호이스팅되지만 초기화 전엔 사용 불가 (Temporal Dead Zone)


✅ 언제 뭘 써야 할까?

- 값을 바꾸지 않을 변수는 무조건 `const`
- 바뀌는 값은 `let`
- `var`는 이제 쓰지 않는 것이 표준 (옛날 코드 호환용만 예외)

📌 요약

- `const`는 불변, `let`은 가변, `var`는 이제 과거의 유물
- 안전하고 예측 가능한 코드를 위해선 `const` & `let` 중심으로 쓰자!