var, let, const의 차이점
var, let, const 는 javaScript의 변수 선언 방식이다.
같은 기능을 하는 것 같지만 조금씩 다른 기능을 하고 있다
중복 선언 가능, 재할당 가능
var title = 'book';
console.log(title); // book
var title = 'movie';
console.log(title); //movie
title = 'music';
console.log(title);//music
이를 보완하기 위해 ES6 부터 추가된 변수 선언 방식이 let 과 const 이다.
중복 선언 불가, 재할당 가능
let title = 'book';
console.log(title); // book
let title = 'movie';
console.log(title);
//Uncaught SyntaxError: Identifier 'title' has already been declared
title = 'music';
console.log(title);//music
중복 선언 불가, 재할당 불가
const title = 'book';
console.log(title); // book
const title = 'movie';
console.log(title);
//Uncaught SyntaxError: Identifier 'title' has already been declared
title = 'music';
console.log(title);
//Uncaught TypeError: Assignment to constant variable
let와 const의 차이는 immutable(재할당) 가능 여부이다.
재할당은 가능한 let과 달리 const는 재할당 또한 불가하다.
유효한 참조 범위가 다르다.
함수 레벨 스코프 (function level scope)
function function_level(){
if(true){
var a = 123;
console.log(a); //123
}
console.log(a);
}
function_level(); //123
console.log(a);//ReferenceError: a is not defined
블록 레벨 스코프 (block level scope)
function block_level(){
if(true){
let a = 123;
console.log(a); //123
}
console.log(a); // ReferenceError: a is not defined.
}
console.log(a);// ReferenceError: a is not defined.
자바스크립트 함수는 실행되기 전에 함수내 필요한 변수값들을 모두 모아 유효 범위의 최상단에 선언한 것 처럼 동작한다.
이런 방식을 호이스팅이라 한다.
console.log(a); //undefined
var a = 123;
console.log(a); //123
test(); //test
function test(){
console.log("test");
}
console.log(a); //ReferenceError: a is not defined
let a = 123;
console.log(a); // 123
let의 경우 변수 a가 선언되기 전에 참조하면 에러가 발생한다.
var 변수 선언은 변수 선언과 동시에 초기화가 이루어지지만 let, const 변수는 선언만 해놓고 초기화는 하지 않는다.
코드 실행 과정에서 변수 선언문을 만났을 때, 초기화를 수행한다.
때문에 호이스팅은 발생하였으나 변수의 선언과 초기화 사이에 일시적으로 변수값을 참조할 수 없는 구간인 TDZ(Temporal Dead Zone)에 빠졌기 때문에 보이는 현상이다.
test(); // error
var test = function() {
console.log("test");
}
test(); // test
❓ 그래서 뭘 쓰는게 좋을까?
재할당이 필요없는 상수와 객체에는 기본적으로 const를 사용하는 것이 좋다. 의도치 않은 재할당을 방지해주기 때문에 안전하다재할당이 필요한 경우 한정적으로 let을 사용하는 것이 좋다. 단, 이 때의 변수의 스코프는 최대한 좁게 만드는 것이 좋다