변수, 함수를 참조하는 코드가 선언문 보다 앞에 있다면 참조 에러가 발생해야 하지만 에러가 발생하지 않는 경우가 생깁니다.
그 이유는 선언이 런타임이 아니라 그 이전 단계에서 먼저 실행(메모리 할당)되기 때문입니다.
선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 호이스팅이라고 합니다.
var, let, const, function, funtion*, class 키워드를 사용해서 선언하는 모든 식별자는 호이스팅 됩니다.
변수 스코프의 맨 위에서 변수의 초기화 완료 시점까지의 변수는 "TDZ(시간상 사각지대)"에 들어간 변수라고 표현합니다.
TDZ가 나타나는 이유는 코드의 작성 순서(위치)가 아닌 코드의 실행 순서(시간)에 의해 형성되기 때문입니다.
TDZ를 사용하는 가장 큰 이유는 가독성이 좋기 때문입니다.
호이스팅이 일어났을때 헷갈리지 않고 데이터 파악이 가능합니다.