본 글은 ‘모던 자바스크립트 Deep Dive’ 14장, ’전역 변수의 문제점’을 참고하여 작성되었습니다.
var x = 'global';
function foo(){
console.log(x);
var x = 'local';
}
foo(); // undefined
console.log(x) // global
호이스팅은 변수선언이 ‘스코프의’ 선두로 끌어올려진 것처럼 동작하는 것이므로
function foo 내부에 선언된 x는 자신의 스코프인 함수 foo의 상단으로 끌어올려진 것처럼 동작하게 된다.
따라서 foo 내부의 console 문에서는 변수 x가 선언과 동시에 초기화 되며 할당되었던 undefined가 출력되고,
그 아래의 console 문에서의 x는 스코프 내에 선언 및 할당되어있던 ‘global'을 참조하게 된다.