JavaScript 호이스팅은 인터프리터가 코드를 실행하기 전에
함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위의 맨 위로 이동시키는 과정을 말한다.
자바스크립트 엔진은 코드를 실행하기 전
실행 가능한 코드를 형상화하고 구분하는 과정(실행 컨텍스트를 위한 과정)을 거친다.
또한 코드를 실행하기 전 실행 컨텍스트를 위한 과정에서
모든 선언(var, let, const, function, class)을 스코프에 등록한다.
코드 실행 전 이미 변수선언/함수선언이 저장되어 있기 때문에
선언문보다 참조/호출이 먼저 나와도 오류 없이 동작한다.
(정확히는 var 키워드로 선언한 변수와 함수 선언문일 경우 오류 없이 동작한다.
이는 선언이 파일의 맨 위로 끌어올려진 것 처럼 보이게 한다.)
실행 컨텍스트는 실행 가능한 코드가 실행되기 위해 필요한 환경을 의미하고
실행되기 전 이러한 실행 컨텍스트 과정(코드를 구분하는 과정)을 거친다.
이 호이스팅이라는 용어는 자바스크립트 실행 컨텍스트에 의한 현상으로 선언이 코드 실행 보다 먼저 메모리에 저장되는 과정으로 인한 것을 말한다.
그래서 자바스크립트 실행 컨텍스트에 대한 이해하는 것이 호이스팅을 이해하는데 도움이 된다. (scope, hoisting, this, function, closure 등의 동작원리를 담고 있는 자바스크립트 핵심원리이다. 코드를 보고 실행 컨텍스트를 이해할 수 있어야 코드 독해, 디버깅을 할수 있다.)