Post

var, let, const의 차이점

var, let, const의 차이점

면접fe

var, let, const는 무슨 차이가 있을까?

  • 셋은 모두 변수 선언 키워드로, 변수를 선언하거나 할당하는 기능을 한다.
  • 셋은 어떤 차이가 있는지 알아보자.

var, let, const

  • var는 변수 재선언, 재할당 모두 가능.
  • let는 변수 재선언 불가능, 재할당 가능.
  • const는 변수 재선언, 재할당 모두 불가능.
  • var함수 범위 키워드
    let, const블록 범위 키워드이다.



var문제점

  1. 이미 만들어진 변수명으로 재선언 시, 아무러 문제를 발생시키지 않음.

    1
    2
    3
    4
    
    var gun = 'test';
    var gun = 'example';
    
    console.log(gun)
    
  2. 호이스팅으로 인한, ReferenceError가 발생하지 않음!

    1
    2
    3
    4
    
    lee = 'test'; // 아직 선언되지 않은 변수가 호이스팅으로 인해 끌어옴.
    var lee; 
    
    console.log(lee)
    

let, const은?!

  • 재선언과 재할당의 문제가 발생한다.

    1
    2
    3
    4
    5
    6
    7
    
     let gun = 'test';  
     let gun = 'example';   // Uncaught SyntaxError 발생
     gun = 'good';          // 재할당 가능
    
     const lee = 'test';  
     const lee = 'example'; // Uncaught SyntaxError 발생
     lee = 'good';          // Uncaught TypeError 발생 
    



function-scoped, 함수 범위

  • var로 선언된 변수는 함수 범위로, 블럭 범위와 관계 없이 변수 호출이 잘된다.

    1
    2
    3
    4
    5
    
    for (var i = 0; i < 5; i++) {
      console.log('블럭 안에서 호출', i)
    }
    
    console.log('블럭 밖에서 호출', i)  // 가능
    

block-scoped, 블록 범위

  • let, const로 선언된 변수는 블록 범위로, 중괄호({})와 관계가 있다.

    1
    2
    3
    4
    5
    
    for (let i = 0; i < 5; i++) {
      console.log('블럭 안에서 호출', i)
    }
    
    console.log('블럭 밖에서 호출', i)  // 불가능
    

TDZ, 일시적 사각지대

  • 범위(scope) 시작 ~ 초기화 직전까지의 구간을 일컫는다.
  • Temporal Dead Zone
  • 블록 범위 키워드로 선언된 변수는 초기화 이전에 호출 시, ReferenceError가 발생한다.
    => 우리는 이때, TDZ에 빠진다고 말할 수 있다.



✨ 출처

Github, var,let,const 차이점은?


This post is licensed under CC BY 4.0 by the author.