호이스팅(Hoisting)

무언가를 들어올리거나 끌어 올리는 동작 설명
코드가 실행되기 전에 변수 및 함수 선언이 로컬 범위의 맨 위로 들어올려지거나 끌어올려지는 경우를 설명
var
위로 호이스팅, undefined값 할당


1. 선언 단계와 할당 단계를 분리
2. var greeting(선언 단계)로 undefined 반환
3. "= hello"(할당 단계)로 hello 할당
=> 즉, 선언 단계만 먼저 시작으로 undefined가 반환 후 hello 할당
=> 결괏값은 undefined로 나오지만 오류는 발생x
함수 선언문

함수 생성 전에 호출 시 올바로 출력이 되는 것을 확인
let / const


var과는 다르게 undefined도 아닌 어떤 값도 할당되지 않음
호이스팅은 되지만 할당은 안하는 것이다.
*TDZ : Temporal Dead Zone, 변수를 사용할 수 없는 일시적인 비활성 상태
결론
변수 생성시 재할당이 필요없으면 const 사용
재할당 필요하면 let 사용, but 변수의 scope를 최대한 좁게 만들어서 사용