var, let, const - JavaScript 변수 선언
JavaScript에서 변수를 선언할 때 var, let, const 중 무엇을 써야 할지 헷갈리시나요? 이 세 가지는 비슷해 보이지만 스코프, 재할당, 호이스팅 등에서 중요한 차이를 가지고 있습니다.
1. var, let, const 비교표
구분 | var | let | const |
스코프 | 함수 스코프 | 블록 스코프 | 블록 스코프 |
재선언 | ✅ 가능 | ❌ 오류 | ❌ 오류 |
재할당 | ✅ 가능 | ✅ 가능 | ❌ 불가능 |
호이스팅 | ✅ 됨 (초기화 안 됨) | ✅ 됨 (초기화 안 됨, TDZ 존재) | ✅ 됨 (초기화 안 됨, TDZ 존재) |
주 사용 시기 | 과거 코드 유지보수용 | 일반 변수 선언 | 상수나 객체 참조 고정 |
a. var (과거의 변수 선언 방식)
function test() {
if (true) {
var x = 10;
}
console.log(x); // 10 (블록 밖에서도 접근됨)
}
- var는 함수 스코프(function scope)입니다.
- 블록 { } 안에서 선언해도 바깥에서 접근 가능합니다. → 의도치 않은 오류 발생 가능
- 재선언, 재할당 모두 가능합니다.
호이스팅을 주의해야 합니다.
console.log(x); // undefined
var x = 10;
- var는 선언이 끌어올려지되(hoisting), 초기화는 안 됩니다.
- 그래서 undefined가 출력됩니다.
b. let (ES6 이후 기본 변수 선언)
if (true) {
let y = 20;
}
console.log(y); // ❌ ReferenceError
- let은 블록 스코프(block scope)입니다.
- 재선언은 불가능하고, 재할당은 가능합니다.
TDZ (Temporal Dead Zone)
console.log(a); // ReferenceError
let a = 5;
- 선언 전 접근하면 에러가 생깁니다.
- 이 구간을 TDZ(일시적 사각지대)라고 부릅니다.
c. const (재할당이 불가능한 변수 선언)
const z = 30;
z = 40; // ❌ TypeError: Assignment to constant variable.
- let과 동일하게 블록 스코프(block scope)입니다.
- 재선언, 재할당 모두 불가능합니다.
- 단, 객체나 배열은 속성 변경은 가능합니다.
const user = { name: "Alice" };
user.name = "Bob"; // ✅ 가능
- const는 값 자체는 바꿀 수 없지만, 참조된 객체는 수정 가능합니다.
2. 어떤 키워드를 언제 써야 할까?
상황 | 추천 키워드 | 이유 |
바뀌지 않아야 할 값 | const | 불변성 유지 & 실수 방지 |
바뀔 수 있는 값 | let | 가변 변수에 적합 |
구식 코드 | var | 가능하면 피하기 (호이스팅 이슈, 스코프 혼란) |
3. 마무리
함께하면 좋은 자료
외부 사이트 :
블로그 글 :
[TDZ] 선언했는데 왜 에러가 날까?
TDZ(Temporal Dead Zone) 자바스크립트에서 let이나 const로 변수를 선언했는데, 예상치 못한 ReferenceError가 발생한 경험, 있으신가요? “분명 선언했는데 왜 안 되지?”라는 의문을 불러일으키는 이 상황
dachaes-devlogs.tistory.com
[실행 컨텍스트] JavaScript는 이렇게 코드를 실행한다.
실행 컨텍스트(Execution Context) JavaScript는 인터프리터 언어임에도 코드 실행 전 많은 준비 과정을 거칩니다. 그 핵심에는 실행 컨텍스트(Execution Context)가 있습니다. 이 글에서는 실행 컨텍스트가
dachaes-devlogs.tistory.com
[호이스팅] 변수 선언의 비밀
호이스팅 (Hoisting) JavaScript에서 var, let, const로 선언한 변수를 실행 전에 사용할 수 있을까? 결론부터 말하면,어느 정도는 가능하지만 조건이 있습니다. 이 글에서는 JavaScript의 호이스팅(Hoisting)
dachaes-devlogs.tistory.com
[스코프] 변수는 어디까지 살아있을까?
스코프(Scope) JavaScript에서 스코프(Scope)란 변수에 접근할 수 있는 범위를 말합니다. 코드를 짤 때 어떤 변수가 어디서 유효한지를 알아야 오류 없이 원하는 동작을 구현할 수 있죠. 이번 글에서는
dachaes-devlogs.tistory.com
'언어 > JavaScript' 카테고리의 다른 글
[실행 컨텍스트] 자바스크립트는 이렇게 코드를 실행한다. (0) | 2025.04.13 |
---|---|
[호이스팅] 변수 선언의 비밀 (0) | 2025.04.13 |
[버블링과 캡처링] 자바스크립트의 이벤트가 흐르는 길 (0) | 2025.04.12 |
[Closure] 자바스크립트의 숨겨진 강력한 기능 (0) | 2025.04.12 |
[이벤트 리스너] 사용자와 코드 사이를 잇는 연결고리 (0) | 2025.04.12 |