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
.
不同的是,一个是变量查找,一个是属性访问。
如果在当前范围内没有找到变量,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
.
不同的是,一个是变量查找,一个是属性访问。