코드 평가 시 선언문을 해당 스코프의 상단으로 끌어 올려 메모리 선점/생성
목적: 각 식별자의 메모리 위치를 미리 잡아 stack 영역 세팅 ⇒ 실행이 빠름!
함수 선언 전에 함수 실행 코드가 있어도 정상적으로 작동한다.
test(); // "Hosting" -> 정상 실행 function test() { document.writeln("Hoisting"); } test(); // "Hoisting"
변수 호이스팅할 때는
- 선언 O
- 초기화 O
- 할당 X
: 선언 전에 호출 시 undefined로 접근한다.
console.log(name); // undefined var name = "Hong GilDong"; console.log(name); // Hong GilDong
: 선언 전에 호출 시 Error 발생
console.log(name1); // ReferenceError const name1 = "Hong GilDong"; console.log(name1); // Hong GilDong console.log(name2); // ReferenceError let name2 = "Hong GilDong"; console.log(name2); // Hong GilDong
JS에만 있는 변수가 선언되기 전 코드 영역 - 임시사각지대
- 변수가 선언되었지만 아직 초기화 되지 않는 상태
== '선언만 되고 아직 초기화 되지 않는 변수가 머무는 공간'
참고