作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我曾经认为,当您在全局命名空间中声明一个变量时,在 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/
我是一名优秀的程序员,十分优秀!