변수 let, var, const의 특징
var
- 선언과 초기화가 동시에 이뤄진 후에 할당이 진행된다
그러므로 할당 전에 호출하면 undefined가 출력된다
- 재선언이 가능하다
var name = 'me';
console.log(name); // me
var name = 'you';
console.log(name); // you
- var은 선언 전에 사용할 수 있다(선언은 hoisting되나, 할당은 되지 않는다)
console.log(name); // undefined
var name = 'me';
- 함수 스코프
함수 내에서 선언되면 외부에서 참조하지 못한다
let
- 선언, 초기화, 할당이 각자 따로 진행된다
호이스팅으로 선언되지만 초기화는 실제 코드에 도달해야 진행되므로 레퍼런스 에러가 뜬다
- 재선언이 불가능하다
let name = 'me';
console.log(name); // me
let name = 'you'; // error
- 블럭 스코프
함수 뿐만 아니라 if, for과 같은 블럭 내에서 선언되면 외부에서 참조하지 못한다
const
const name; // error
name = 'me';