var, let, const의 차이점
var, let, const의 차이점
var, let, const는 무슨 차이가 있을까?
- 셋은 모두 변수 선언 키워드로, 변수를 선언하거나 할당하는 기능을 한다.
- 셋은 어떤 차이가 있는지 알아보자.
var, let, const
var는 변수 재선언, 재할당 모두 가능.let는 변수 재선언 불가능, 재할당 가능.const는 변수 재선언, 재할당 모두 불가능.var는 함수 범위 키워드고
let,const는 블록 범위 키워드이다.
var의 문제점
이미 만들어진 변수명으로 재선언 시, 아무러 문제를 발생시키지 않음.
1 2 3 4
var gun = 'test'; var gun = 'example'; console.log(gun)
호이스팅으로 인한, 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에 빠진다고 말할 수 있다.
✨ 출처
This post is licensed under CC BY 4.0 by the author.