window.someRandomVar 与 someRandomVar 之间的区别

Difference between window.someRandomVar vs someRandomVar

如果在当前范围内没有找到变量,JS 引擎会寻找父分数,直到它到达全局范围。

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

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

但是当我在 window 对象上显式调用它时,它显示未定义。

console.log(window.someRandomVariable)

据我了解,前者也在搜索 window 对象,因为它不在任何函数范围内。

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

console.log(someRandomVariable); 

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

console.log(window.someRandomVariable)

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

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


不同的是,一个是变量查找,一个是属性访问。