ES6 이전에 지배적으로 사용
함수 스코프
var c = 5;
{
var c = 10;
}
console.log(c); // 10
재선언 가능, 재할당 가능
var a = 5;
var a = 10;
var a = 15;
console.log(a); // 15
호이스팅(선언부가 최상단으로 끌어올려지는 현상) 되어 선언문 전에 사용하면 undefined를 출력
// 3.1 var은 호이스팅
console.log(e); // undefined
var e = 5;
ES6에 추가
블록 스코프 (조건문(if,else if,else), for, while, do-while, switch문 단순 블록 {})
let d = 5;
{
let d = 10;
}
console.log(d); // 5
재선언 불가
let b = 5;
let b = 10;
let b = 15;
console.log(b); // SyntaxError: Identifier 'b' has already been declared
호이스팅은 됨. but 선언 - 초기화 사이의 Temporal Dead Zone(TDZ)으로 인해 선언만 이뤄져 Reference Error가 발생
console.log(f); // ReferenceError: Cannot access 'f' before initialization
let f = 5;
let은 재할당 가능 / const는 재할당 불가능