그 이유를 일단 얘기하자면 컴파일러는 컴파일레이션 단계 그리고 실행단계를 거치기 때문이다.
예를 보면
a = 2
var a
console.log(a)
다음과 같은 js파일이 있으면 모두가 알다시피 log
의 결과로 2가 출력될 것이다.
컴파일레이션 단계에서 var a
가 실행되고
실행 단계에서 a=2; console.log(a)
구문이 실행되는 것이다.
var
변수
함수 선언식
foo() // 가능
function foo() {}
bar() // TypeError : 함수 표현식은 안됨
var bar = () => {} // TypeError가 나는 이유는 var bar가 호이스팅 되어서 undefined인데 함수로 실행 하려고 해서 그렇다.