This question already has answers here:
Javascript function scoping and hoisting
                            
                                (16个答案)
                            
                    
                4年前关闭。
        

    

为什么直到几行之后才使用或初始化foo才是window的属性

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';

最佳答案

由于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

关于javascript - 为什么它已经是window属性? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35803852/

10-13 08:33