면접 질문 관련

var, let, const 정리

NiceKHJ 2025. 6. 5. 14:24

1. 선언 방식 비교

구분 var let const  
스코프 함수 스코프 블록 스코프 블록 스코프  
재선언 가능 불가능 불가능  
재할당 가능 가능 불가능  
호이스팅 셋 다 호이스팅은 된다.
단 let/const는 TDZ 존재함
TDZ 없음 있음 있음  

※TDZ (Temporal Dead Zone) 란?

    : TDZ는 변수 선언(let , const)이 호이스팅은 되었지만 아직 초기화되지 않은 구간
      이 구간에서는 변수에 접근하려 하면 ReferenceError가 발생함.
      - 초기화란? 변수에 값을 처음으로 할당하는 것

 

 

2. 선언 시 동작 비교 (호이스팅 + TDZ 포함)

예시코드 결과 설명
console.log(x);
var x = 1;
출력 : undefined var는 호이스팅되며 undefined 로 초기화되기 때문에 에러 없이 실행됨.
console.log(y);
let y = 2;
❌ ReferenceError let은 호이스팅 되지만 초기화 전에는 TDZ에 있어 접근 불가.
console.log(z);
const z = 3;
❌ ReferenceError const도 TDZ로 인해 선언 전 접근 시 에러 발생.

 

 

3. 선언만 가능할 수 있나??

  1. var ( ⭕ ) = var a;
  2. let (⭕) = let a;
  3. const (❌) = const a;  ※에러 발생 const 는 선언할 때 값을 할당해야함

 

4. 재선언 가능 여부

  재선언 가능 여부 예시 코드 설명
var  가능 var x = 1;
var x = 2;
같은 이름으로 다시 선언해도 에러 없이 덮어씀
let  불가능 let x = 1;
let x = 2;
같은 이름으로 선언하면 SyntaxError 발생
const  불가능 const x = 1;
const x =2;
let 과 마찬가지로 재선언시 에러 발생

 

 

5. 스코프의 차이

  스코프 종류 예시 코드 설명
var  함수 스코프 function khj() {
  var x = 1; 
}
블록(if, for 등)을 무시하고 함수 단위로 범위 설정
let 블록 스코프 if (true){
  let x = 1;
}
중괄호 {} 안에서만 접근 가능
const  블록 스코프 if (true){
  const x = 1;
}
let과 동일하게 블록 단위 스코프를 가졌다.

 

 

스코프 예시

function NiceKHJ() {
	if(true) {
		var a = 1;
		let b = 2;
		const c = 3;
        
        console.log(a) O    var는 함수 스코프
        console.log(b) O    블록 안에있으므로 전부 호출가능
        console.log(c) O
}; // if end
        console.log(a) O    var 는 함수 스코프로 함수 안에만 있으면 호출가능
        console.log(b) X    let 과 const 는 블록스코프로 if 안에서 선언이 되었으면
        console.log(c) X    해당 블록 안에서만 호출가능
}; //NiceKHJ end

'면접 질문 관련' 카테고리의 다른 글

실행 컨텍스트란?  (1) 2025.06.16
자바스크립트의 this  (1) 2025.06.11
클로저 (Closure) 정리  (1) 2025.06.09
스코프 체인 (Scope Chain) 정리  (1) 2025.06.05