호이스팅이란?
스코프 내부 어디서든 변수 선언은 최상위에 선언된 것 처럼 행동하는것을 의미한다.
var
로 선언한 모든 변수는 코드가 실제로는 이동하지 않지만
최상위로 끌어 올려진것 처럼 행동한다. 이를 호이스팅이라고 한다.
하지만 undefined
가 뜬 이유는 선언은 호이스팅 되지만 할당은 호이스팅 되지 않기 때문이다. name
이라는 변수만 올려진 것이고 Mike
라는 값은 그자리에 있는다.
할당은 3번째 줄에서 처리된다.
같은 상황에서 let
은 error
를 일으킨다. 하지만 let
과 const
가 호이스팅 되지 않는 것은 아니다. Temporal Dead Zone 때문이다.
TDZ(Temporal Dead Zone)
TDZ존에서는 변수들은 사용할 수 없다.
let
과 const
는 TDZ 영향을 받고
이 TDZ 영역에 있는 변수들은 사용 할 수 없기 때문에 할당을 받기 전까지는 사용 할 수 없다.
이는 코드를 예측 가능하게 하고 잠재적인 버그를 줄여준다.