| 구분 | var | let (ES6 이후 도입) |
|---|---|---|
| 스코프(Scope) | 함수 스코프 | 블록 스코프 ({} 안에 제한) |
| 변수 호이스팅 | 호이스팅됨 (초기화는 안됨) | 호이스팅은 되지만 TDZ 발생 |
| 중복 선언 허용 | ✅ 허용 | ❌ 같은 스코프 내에서 불가 |
| 전역 객체(window)에 등록 | ✅ 등록됨 | ❌ 등록 안됨 |
function testVar() {
if (true) {
var x = 1;
}
console.log(x); // 1 (함수 스코프라 접근됨)
}
function testLet() {
if (true) {
let y = 2;
}
console.log(y); // ❌ ReferenceError (블록 스코프)
}
console.log(a); // undefined
var a = 10;
console.log(b); // ❌ ReferenceError
let b = 10;
var a = 1;
var b = 2;
if (a === 1) {
var a = 11; // 전역 변수
let b = 22; // if 블록 변수
console.log(a); // 11
console.log(b); // 22
}
console.log(a); // 11
console.log(b); // 2
/////
var x = 1;
var x = 2; // 가능
let y = 1;
let y = 2; // ❌ SyntaxError
| 구분 | let | const |
|---|---|---|
| 재할당 가능 여부 | 가능 (변수 값 변경 가능) | 불가능 (한 번 할당하면 값 변경 불가) |
| 초기화 | 선언 후 나중에 값 할당 가능 | 선언과 동시에 초기화 필수 |
| 스코프 | 블록 스코프 | 블록 스코프 |
예시)
let a = 10;
a = 20; // 가능
const b = 10;
b = 20; // ❌ 오류: Assignment to constant variable.
let을 쓰세요. var는 옛날 방식이며, 스코프 오류를 유발할 수 있어서 지양하는 것이 좋습니다.
변하지 않는 값은 const를 사용하세요.
👉 최신 JavaScript 코딩 스타일에서는 var는 거의 사용하지 않고 let/const를 씁니다.