2.4 호이스팅과 일시적 데드존
var 선언이 호이스팅된다는 것은 잘 알려져 있다. var를 사용하면 변수를 선언하기 전에 사용할 수 있다.
function example() { console.log(answer); answer = 42; console.log(answer); var answer = 67; } example();
example을 실행하면 다음이 출력된다.
undefined 42
변수가 선언되기 전에 신나게 사용했지만 var 선언이 함수의 맨 위로 이동한 것처럼 동작한다. 그리고 선언만 이동하고 그것에 연결된 초기화(var answer = 67의 = 67 부분)는 아니다.
이는 example 함수를 실행할 때 자바스크립트 엔진이 단계별 코드 실행을 시작하기 전에 var 선언을 처리하고 필요한 변수를 생성하는 함수를 스캔하기 때문에 발생한다. 함수의 맨 위에 선언을 “호이스트”한다(끌어올린다). 그렇게 할 때 undefined 기본값으로 선언한 변수를 초기화한다. 그러나 다시 말하지만, 코드의 명백한 의도와 실제 효과는 동기화되지 않았으므로 여기에 버그가 있음을 의미할 수 있다. 첫 번째 줄은 포함 범위(아마도 전역일 수도 있음)에 있는 응답 변수에 할당하려고 하지만 대신 로컬을 사용하는 것 같다. 또한 작성자가 answer가 생성될 때 값이 67로 시작되도록 의도한 것처럼 보인다.