如果在当前范围内找不到变量in,则JS引擎会寻找父项得分,直到达到全局范围。

现在,在浏览器中,如果我尝试以下操作

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


但是,当我在window对象上显式调用它时,它显示为undefined。

console.log(window.someRandomVariable)


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

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

最佳答案

console.log(someRandomVariable);


Javascript查找someRandomVariable,在任何范围内都找不到它,并引发您所看到的异常。您说的是搜索窗口范围是正确的-但是您没有在窗口(或任何)范围内定义此变量。所以失败了。

console.log(window.someRandomVariable)


Javascript查找window变量。它成功,然后转到someRandomVariable属性。这是未定义的,因此您得到undefined

可能值得注意的是,如果您尝试访问未定义变量的属性,也会出现错误。即,尝试window.someRandomVariable.someRandomVariable



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

10-02 14:07