코드를 실행하기 전, 변수(함수) 선언이 해당 스코프의 최상단으로 끌어올라간 것 같은 현상이다. 실제로 위로 올라간 게 아니다.
실행하기도 전에 자바스크립트는 어떤 변수와 함수가 있는지 다 알고 있다🤓
var foo;
선언과 함께 undefined
로 초기화되어 메모리에 저장된다.let foo; const bar;
선언은 되지만 초기화는 되지 않는다.초기화되지 않으면 변수를 참조할 수 없다.
console.log(a); ---> undefined🫥
var a = 1;
var foo = 123; // 전역 변수
console.log(foo); ---> 123
{
var foo = 456; // 전역 변수
}
console.log(foo); ---> 456
var foo = 123;
var foo = 456;
console.log(a); ---> Error🚨
let a = 1;
Uncaught ReferenceError: Cannot access 'a' before initialization
let foo = 123; // 전역 변수
console.log(foo);
{
let foo = 456; // 지역 변수
}
console.log(foo);
let foo = 123;
let foo = 456; ---> Error🚨
재할당이 불가하다.
참고 자료