인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것
호이스팅
은 코드를 실행하기 전 변수선언/함수선언
을 해당 스코프의 최상단으로 끌어올리는 것이 아닌 끌어올려진 것 같은 현상을 말한다.
자바 스크립트 엔진은 코드릴 실행하기 전
실행 가능한 코드를 형상화
하고 구분하는 과정(실행 컨텍스트를 위한 과정)을 거치며 그 과정에서 모든 선언
(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/