업데이트가 필요한 경우 let을, 그 외에는 모두 const를 사용한다.
var 는 사용하지 않는다.
var 는 재할당이 가능하고 블록 레벨 내에 있어도 전역변수로 인식된다.
그래서 의도치 않은 값이 재할당되어 에러가 발생할 수 있다.
반면 let은 블록 레벨을 따른다.
var a = 10;
{
var a = 20 //=> 전역변수
}
console.log(a); //20
let a = 10;
{
let a = 20 //=> 지역변수
}
console.log(a); //10
let은 var 와 달리 중복 이름 변수 선언이 불가하다.
var a = 10;
var a = 20;
console.log(a); //20
let a = 10;
let a = 20;
console.log(a); //Uncaught SyntaxError: Identifier 'a' has already been declared
호이스팅이란, var 선언문이나 function 선언문 등을 해당 스코프의 선두에 옮기 것처럼 동작하는 특성이다.
변수에 할당된 함수 표현식(함수선언식)은 위로 끌어올려지지 않는다.
foo(); //hi
foo2(); //Uncaught TypeError: foo2 is not a function
// 함수선언문
function foo() {
console.log("hi");
}
//함수선언식
var foo2 = function() {
console.log("hihi");
}