[JS] var, let, const 비교 정리

이룸·2026년 3월 15일

위클리페이퍼

목록 보기
7/15

🚀 var, let, const

자바스크립트에서 변수를 선언할 때 사용하는 var, let, const의 차이점을 4가지 핵심 기준(재선언, 재할당, 스코프, 호이스팅)으로 비교해봤다.

1. var (이제는 사용하지 않음)

과거 자바스크립트에서 변수를 선언하는 유일한 방법이었다. 하지만 유연함이 오히려 독이 되어 예기치 못한 버그를 유발하기 쉽다.

  • 함수 레벨 스코프 (Function-level scope): 함수 내에서 선언된 변수만 지역 변수가 되며, if문이나 for문 같은 블록 안에서 선언해도 전역 변수처럼 취급될 수 있다.
  • 재선언 & 재할당: 같은 이름으로 변수를 다시 선언해도 에러가 나지 않고 덮어씌워진다.

2. let (값이 변하는 변수 선언)

ES6에서 도입된 변수 선언 방식이다. 값이 변할 수 있는 변수를 선언할 때 사용한다.

  • 블록 레벨 스코프 (Block-level scope): 중괄호 { } 안에서 선언된 변수는 그 블록 안에서만 유효하다.
  • 재할당 가능, 재선언 불가: 변수에 새로운 값을 다시 넣을 수는 있지만, 똑같은 이름의 변수를 두 번 선언하면 에러가 발생하여 안전하다.

3. const (변하지 않는 상수 선언)

let과 함께 ES6에 도입되었으며, 변하지 않는 값(상수)을 선언할 때 사용한다. 모던 자바스크립트에서는 기본적으로 const 사용을 권장한다.

  • 재할당 & 재선언 모두 불가: 한 번 값을 할당하면 절대 다른 값으로 변경할 수 없다. (단, 객체나 배열을 할당했을 때 내부의 속성값은 변경할 수 있다.)
  • 선언과 동시에 초기화: const a; 처럼 선언만 하는 것은 불가능하며, 반드시 값을 함께 할당해야 한다.

💡 호이스팅과 TDZ (Temporal Dead Zone)

세 가지 모두 호이스팅(선언이 코드의 최상단으로 끌어올려지는 현상)이 발생한다.
하지만 var는 선언과 동시에 undefined로 초기화되어 에러 없이 접근 가능한 반면, letconst는 초기화되기 전까지 접근할 수 없는 TDZ(일시적 사각지대) 에 빠지게 되어 ReferenceError를 뱉어낸다. 이는 코드의 안정성을 높여주는 중요한 특징이다.


📊 마무리 간단 요약

특징varletconst
재선언가능 (O)불가능 (X)불가능 (X)
재할당가능 (O)가능 (O)불가능 (X)
스코프 (Scope)함수 레벨 스코프블록 레벨 스코프블록 레벨 스코프
호이스팅 (Hoisting)undefined로 초기화됨호이스팅 되지만 TDZ 발생호이스팅 되지만 TDZ 발생

변수 선언 시 기본적으로 const 를 사용하고, 재할당이 반드시 필요한 경우(예: for문의 반복 변수)에만 한정적으로 let 을 사용하면 된다. var 는 더 이상 사용하지 않는 것이 좋다!

profile
내 꿈은 풀스택 개발자

0개의 댓글