인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것
호이스팅은 코드를 실행하기 전 변수선언/함수선언을 해당 스코프의 최상단으로 끌어올리는 것이 아닌 끌어올려진 것 같은 현상을 말한다.
자바 스크립트 엔진은 코드릴 실행하기 전 실행 가능한 코드를 형상화하고 구분하는 과정(실행 컨텍스트를 위한 과정)을 거치며 그 과정에서 모든 선언(var, let, const, function, class)을 스코프에 등록한다.
코드 실행 전 이미 변수선언/함수선언이 저장되어 있기 떄문에 선언문보다 참조/호출이 먼저 나와도 오류 없이 동작한다.
자바 스크립트의 모든 선언에는 호이스팅이 일어난다.
var키워드로 선언된 변수와는 달리 let 키워드로 선언된 변수를 선언문 이전에 참조하면 참조 에러(ReferenceError)가 발생한다.
var키워드는 선언과 함께 undefined로 초기화되어 메모리에 저장 let과 const는 초기화되지 않은 상태로 선언만 메모리에 저장된다.
초기화 되지 않으면 변수를 참조할 수 없다. 그래서 참조 에러가 발생
변수가 초기화되지 않았기 때문이다. 즉, 변수를 위한 메모리 공간이 아직 확보되지 않았기 때문이다.https://developer.mozilla.org/ko/docs/Glossary/Hoisting > https://gmlwjd9405.github.io/2019/04/22/javascript-hoisting.html > https://hanamon.kr/javascript-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80-hoisting/