[JavaScript] let , const 키워드와 블록레벨 스코프

HyeonE·2025년 5월 21일

JS

목록 보기
10/17
post-thumbnail

JavaScript에서는 변수를 선언할 때 사용하는 키워드로 var, let, const가 있습니다.
ES6 이후부터 letconst가 도입되며 블록 레벨 스코프(block-level scope) 개념이 강화되었고,
그에 따라 코드의 예측 가능성과 안정성이 높아졌습니다.

이번 글에서는 let, const의 특징과 블록 레벨 스코프에 대해 자세히 기술해보겠습니다.


let 키워드

let변수 재할당이 가능한 변수 선언 방식입니다.
기존의 var와 다르게 블록 스코프를 가지며, 호이스팅은 되지만 초기화는 되지 않습니다.

let x = 10;
x = 20; // 가능

console.log(x); // 20

const 키워드

const는 재할당이 불가능한 상수를 선언합니다.
하지만 객체(Object)나 배열(Array)을 const로 선언한 경우, 프로퍼티/요소 변경은 가능합니다.

const y = 100;
y = 200; // ❌ TypeError: Assignment to constant variable.

const obj = { name: "Lee" };
obj.name = "Kim"; // ✅ 가능
console.log(obj.name); // "Kim"

블록 레벨 스코프란?

letconst는 모두 블록 레벨 스코프를 따릅니다.
즉, 중괄호 {}로 감싸진 모든 영역(if, for, function 등)에서 지역 스코프를 가집니다.

{
  let a = 1;
  const b = 2;
}
console.log(a); // ReferenceError: a is not defined
console.log(b); // ReferenceError: b is not defined

반면, var함수 레벨 스코프를 따르기 때문에 예상치 못한 사이드 이펙트가 발생할 수 있습니다.

if (true) {
  var x = 10;
}
console.log(x); // 10 (밖에서도 접근 가능)

호이스팅과 TDZ(Temporal Dead Zone)

letconst도 호이스팅은 되지만, 일시적 사각지대(TDZ)로 인해
선언 전에 접근하려 하면 ReferenceError가 발생합니다.

console.log(a); // ❌ ReferenceError
let a = 5;

TDZ란 변수 선언은 호이스팅되어 있지만, 코드 실행 전까지 접근할 수 없는 구간을 의미합니다.


정리요약

var는 지양하고 let, const를 사용하자
• 기본적으로는 const 사용, 재할당이 필요한 경우에만 let 사용
블록 스코프를 통해 변수의 유효 범위를 명확하게 관리하면 예측 가능한 코드 작성이 가능해진다

letconst는 모두 블록 레벨 스코프를 갖는다
• const로 선언한 객체는 불변이 아니다 (단, 재할당은 불가)
• 호이스팅되더라도 TDZ로 인해 선언 전 접근은 금지된다


항목varletconst
재선언✅ 가능❌ 불가능❌ 불가능
재할당✅ 가능✅ 가능❌ 불가능
스코프함수 스코프블록 스코프블록 스코프
호이스팅✅ O✅ O✅ O
TDZ (일시적 사각지대)❌ 없음✅ 있음✅ 있음
초기화 필요 여부❌ X (undefined)❌ X (선언 후 가능)✅ 선언과 동시에 초기화 필요
사용 권장 여부❌ 지양✅ 사용 권장✅ 기본적으로 사용
profile
기억보다 기록을

0개의 댓글