This question already has answers here:
What's the difference between window.x and x?

(2 个回答)


5年前关闭。




为什么这个:
if(x)
  alert('Available');

给出:ReferenceError: x is not defined
虽然这有效:
if(window.x)
   alert('Available');

不是说:
var x = "";

相当于:
x = "";

相当于:
window.x = "";

只要之外是一个函数,因为整个代码都被一个with(window)包围了?

为了更清楚:我确实知道全局变量与成员变量之间的区别,但我想知道为什么检索未声明的变量会产生像 x; 这样的 ReferenceError 而 window.x 给出未定义?他们不应该都给 undefined 吗?

最佳答案

window.x “有效”的原因(但它不应该满足 if 条件)是因为在访问对象的不存在属性时,返回的是 undefined,而不是异常。直接访问变量则相反。这很可能是因为如果变量在定义之前被访问,则程序可能存在不应被忽视的错误。

此外,var 定义了一个只能在封闭范围内访问的变量。省略关键字会导致创建全局变量。

关于javascript - 为什么 if(x) 与 if(window.x) 不同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25005869/

10-10 22:03
查看更多