如果在当前范围内找不到变量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
。区别在于,一个是变量查找,另一个是属性访问。