항상 써오던 var와 const와 let 어떤것이 최근에 많이쓰는 추세이고 어떤 차이가 있는지 대략적으로는 알고 있지만 정확한 개념정립을 위해 글로 써보기로 하였다.
if (true) {
var y = 20;
console.log(y); // 20
}
console.log(y); // 20
if (true) {
let x = 10;
console.log(x); // 10
}
console.log(x); // error
-> 일반적으로 변경될 필요가 없는 값들은 const로, 그 외의 경우에는 let을 자주 사용 (var는 최근에 잘 사용되지 않음)
js에서 모든 선언은 호이스팅이 된다.
javascript엔진은 코드를 한 줄씩 순차해석하는 것이 아니고 두 단계로 나누어 처리한다.
컴파일(Compile) 단계와 실행(Execution)단계인데, 컴파일 단계에서 모든 선언문을 해당 스코프의 최상단으로 끌어올린다. 이것이 바로 "호이스팅"이다.
실행 단계에서 실제 코드가 순차적으로 실행되며, 변수에 값들이 할당되고 함수가 호출된다.
여기서 var와 let/const사이에 호이스팅 동작 방식에 차이가 있다.
-> var는 선언과 초기화가 동시에 일어나서 호이스팅 됐을 때 undefined 값으로 초기화됨.
이로 인해 선언 전에 접근하면 undefined 상태로 접근된다.
let/const는 선언만 호이스팅되어 초기화되진 않는다.
이로 인해 선언 전에 접근하려고 하면 ReferenceError가 발생한다.
console.log(myVar); // undefined
console.log(myLet); // ReferenceError: myLet is not defined
var myVar = 5;
let myLet = 10;