스코프 안에 존재하는 모든 선언을 스코프의 최상단으로 끌어올리는 것
변수는 1. 선언 2. 초기화 3. 할당 3가지 순서를 거쳐 생성된다.
var는 선언과 초기화가 동시에 되어 선언문 전에 접근하여도 오류가 발생하지 않는다.
let은 선언과 초기화가 각각 따로 이루어 진다. 때문에 선언문 전에 접근하면
"정의 되지 않았다"는 오류가 발생한다. 스코프의 시작지점부터 변수 선언문까지 이 변수에 접근하지 못하는 일시적 사각지대(TDZ)가 생긴다.
함수는 선언, 초기화, 할당은 한번에 이루어지기 때문에 TDZ도 존재하지 않는다.
fun1();
function fun1(){
console.log("hi");
}
이렇게 선언 전에 접근해도 변수가 잘 실행된다.