Hoisting
은 JavaScript에서 변수와 함수 선언을 현재 스코프의 맨 위로 이동시키는 것을 말합니다. 이것은 코드의 순서에 상관없이 변수와 함수를 사용할 수 있도록 합니다.
console.log(a) //undefined (아직 변수 할당전이므로)
var a = 1
console.log(a) // 1 (변수의 선언과 초기화를 같이 시켜버림)
cf)var는 전역변수와 지역변수 개념이 확실하지않다는 문제점이 존재.
var는 함수만 지역변수로 호이스팅이 되고, 나머지는 모두 전역변수.
console.log(a)
let a = 1
console.log(a)
//ReferenceError
let은 TDZ라는 개념으로!
TDZ
는 Temporal Dead Zone
의 약자이며, 이것은 let과 const 키워드로 선언된 변수가 스코프 내에서 선언되기 전에는 사용될 수 없다는 것을 의미합니다.
TDZ에서 변수에 접근하려고 하면 ReferenceError가 발생합니다.
console.log(a)
let a = 1
console.log(a)
//ReferenceError으로 일시적으로 a에 접근할수없다는 존을 만든다고 생각하자!
위 코드에서 a 변수는 아직 선언되지 않았기 때문에 ReferenceError가 발생합니다.
이는 TDZ에 의해 발생합니다. 따라서 변수를 사용하기 전에 반드시 변수를 선언해야 합니다.
정리 다시 필요함 -
컴파일에러와 런타임에러 정리가 필요 -