개발자 공부/☁️ 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