var x = 10;
function foo(){
y = 20;
console.log(x+y);
}
foo(); // 30
y는 전역에 선언되지 않았음에도 참조되어 foo는 30을 출력한다.
선언하지 않은 식별자에 값을 할당하면 전역객체의 '프로퍼티' 가 된다.
이는 변수가 아니다. window.y = 20 처럼 해석되어, 전역객체의 프로퍼티가 되는 것이다.
이러한 현상을 implicit global, 암묵적 전역 이라 한다.
y는 변수가 아니므로 호이스팅이 발생하지 않는다!
// 전역 변수 x는 호이스팅이 발생한다.
console.log(x); // undefined
// 전역 변수가 아니라 단지 전역 프로퍼티인 y는 호이스팅이 발생하지 않는다.
console.log(y); // ReferenceError: y is not defined
var x = 10; // 전역 변수
function foo () {
// 선언하지 않은 변수
y = 20;
console.log(x + y);
}
foo(); // 30