개발자 공부/☁️ Genesys Cloud
var let const 정의 및 차의점
유정♡
2025. 5. 2. 13:40
var, let, const는 JavaScript에서 변수를 선언할 때 사용하는 키워드 !
이 세 가지는 선언 방식, 스코프(Scope), 호이스팅(Hoisting), 재할당 가능 여부 등의 측면에서 중요한 차이점이 존재 !
📌 1. 선언 방식
스코프 | 함수 스코프 (var) | 블록 스코프 (let) | 블록 스코프 (const) |
호이스팅 | O (초기값: undefined) | O (초기화 전 접근 시 에러) | O (초기화 전 접근 시 에러) |
재선언 | O | X | X |
재할당 | O | O | X (불변) |
🔍 2. 각 키워드의 특징
✅ var
- 함수 스코프만 가짐 (if, for 등 블록에서는 스코프가 구분되지 않음)
- 호이스팅 시 변수 선언이 끌어올려짐(초기값은 undefined)
- 같은 이름으로 재선언 가능
- 재할당 가능
function example() {
if (true) {
var x = 10;
}
console.log(x); // 10 (if문 밖에서도 접근됨)
}
✅ let
- 블록 스코프를 가짐 ({} 내부에서만 유효)
- 호이스팅은 되지만, TDZ(Temporal Dead Zone) 때문에 초기화 전 접근하면 에러 발생
- 재선언 불가, 재할당 가능
function example() {
if (true) {
let y = 20;
console.log(y); // 20
}
console.log(y); // ReferenceError
}
✅ const
- 블록 스코프
- 호이스팅되지만 TDZ 존재
- 재선언, 재할당 모두 불가
- 객체나 배열은 내부 값 변경은 가능
const z = [1, 2, 3];
z.push(4); // 가능
z = [5, 6]; // TypeError (재할당 불가)
⚠️ 3. TDZ (Temporal Dead Zone: 일시적 사각지대)
let과 const는 변수 선언 전에 접근하면 ReferenceError가 발생합니다. 이걸 TDZ라고 함
console.log(a); // undefined
var a = 5;
console.log(b); // ReferenceError
let b = 5;
✅ 정리 요약
- var는 옛날 방식이고, 함수 스코프 + 호이스팅 시 예기치 않은 오류 가능
- let은 대부분의 경우 사용에 적합, 재할당 가능하면서 블록 스코프 보장
- const는 상수 선언에 사용, 선언과 동시에 초기화 필요, 불변성 유지
JavaScript에서 **스코프(Scope)**란 _변수나 함수가 유효한 범위(접근 가능한 범위)_를 의미
이때 "함수 스코프"와 "블록 스코프"는 변수가 어디까지 유효한지를 구분짓는 개념
✅ 함수 스코프 (Function Scope)
- var로 선언한 변수는 함수 안에서만 유효
- if, for, {} 같은 블록 내부에서 선언해도 함수 전체에서 접근 가능
function test() {
if (true) {
var a = 10;
}
console.log(a); // 10 (함수 전체에서 a를 볼 수 있음)
}
test();
console.log(a); // ❌ ReferenceError: a is not defined
👉 var는 오직 함수 단위로만 스코프를 구분한다는 것이 특징
✅ 블록 스코프 (Block Scope)
- let과 const는 중괄호 {} 내부에서만 유효
- if, for, while, 함수 등 모든 블록 내에서만 접근 가능
function test() {
if (true) {
let b = 20;
const c = 30;
console.log(b); // 20
console.log(c); // 30
}
console.log(b); // ❌ ReferenceError
console.log(c); // ❌ ReferenceError
}
👉 let과 const는 중괄호 {}가 닫히면 변수도 사라짐
📌 한눈에 비교
스코프 유형 | 함수 스코프 (var) | 블록 스코프 (let, const) |
유효 범위 | 함수 전체 | {} 블록 내부만 |
예시 구문 | function, var | if, for, while, {} 등 |
728x90