gpt4 book ai didi

javascript - 全局变量混淆 : var a vs window. a

转载 作者:行者123 更新时间:2023-11-30 12:20:58 25 4
gpt4 key购买 nike

我曾经认为,当您在全局命名空间中声明一个变量时,在 Web 浏览器的上下文中,它会附加到窗口对象。这似乎确实发生了,但是用 var 关键字声明一个全局变量和将它直接附加到窗口对象之间肯定是有区别的。从 Chrome 控制台查看:

var a;
> undefined
window.hasOwnProperty("a")
> true
window.a = 0
> 0
delete window.a
> false
window.hasOwnProperty("a")
> true
/* so it's still there */
window.a
> 0

window.b = undefined
> undefined
window.hasOwnProperty("b")
> true
window.b = 0
> 0
delete window.b
> true
window.hasOwnProperty("b")
> false
window.b
> undefined

有人可以阐明这一点吗?

最佳答案

您已经确定了唯一的显着差异:如果您使用 var,则无法删除 在全局对象上创建的属性。如果你不这样做,如果你只是分配给一个属性来创建它,那么就像所有对象属性一样你可以删除它。

这似乎有点武断,但实际上它是有道理的:你不能在运行时删除 var 语句,毕竟,语义是 var 创建的当前执行上下文的变量环境的绑定(bind)对象的属性。 (哇,太啰嗦了。)因此创建不可删除的属性是有道理的。

详情请见§10.5§10.2.1.1.2的规范。 §10.5 基本上说 var 触发 CreateMutableBinding(§10.2.1.1.2),D 参数为假(假 = 不可删除)。

关于javascript - 全局变量混淆 : var a vs window. a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31104448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com