为什么它已经是一个窗口属性?

时间:2016-03-04 18:51:49

标签: javascript initialization

为什么foo在没有使用或初始化直到几行之后才是窗口的属性

for(var propName in window) {
    if(propName == 'foo') { //obv defined if its here
        console.log('WTF? Its already a part of window!!');
    }
}
console.log(typeof foo);
var foo = 'bar';

1 个答案:

答案 0 :(得分:1)

由于var top hoisting,您的代码实际上看起来像这个。

当您全局声明变量时,它是 对象隐含的一部分。 因此, foo 变量是window对象的一部分,由this对象引用。

var foo;
for (var propName in window) {
    if (propName == 'foo') { //obv defined if its here
        console.log('WTF? Its already a part of window!!');
    }
}

console.log(typeof foo);
foo = 'bar';

this===window //true in this case