2017-10-17 76 views
0

如果在当前作用域中找不到变量,那么JS引擎会查找父级分数,直到达到全局范围。现在window.someRandomVar vs someRandomVar之间的区别

,在浏览器中,如果我尝试下面

console.log(someRandomVariable); 
// This throws ReferenceError as someRandomVariable is Not found on Global/Window scope. 

但是,当我明确地把它叫做窗口对象,它显示了不确定的。

console.log(window.someRandomVariable) 

根据我的理解,前者也在窗口对象上搜索,因为它不在任何函数范围内。

为什么它有两种不同的行为?

回答

1
console.log(someRandomVariable); 

的Javascript中查找someRandomVariable,在任何范围内无法找到它并抛出您所看到的例外。您在说窗口范围被搜索时是正确的 - 但是您没有在窗口(或任何)范围中定义该变量。所以它失败了。

console.log(window.someRandomVariable) 

Javascript查找window变量。它成功,然后转到someRandomVariable属性。这没有定义,所以你得到undefined

可能值得注意的是,如果您试图访问未定义变量的属性,那么您也会遇到错误。即,试试window.someRandomVariable.someRandomVariable


的区别在于,一个是可变的查找,而另一个是一个属性的访问。