全局var混淆:var a vs window.a
Global var confusion: var a vs window.a
我曾经认为,当您在全局命名空间中声明变量时,在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
,则不能使用在全局对象上创建的属性delete
。如果你不这样做,如果你只是分配给一个属性来创建它,那么就像所有对象属性一样,你可以删除它
这看起来有点武断,但实际上是有道理的:毕竟,您不能在运行时删除var
语句,其语义是var
在当前执行上下文的变量环境的绑定对象上创建一个属性(哇,这太令人讨厌了。)因此,它创建了一个不可删除的属性是有道理的。
详细信息见本规范的§10.5和§10.2.1.1.2。§10.5基本上说var
触发CreateMutableBinding(§10.2.1.1.2),其中D参数为false(false=不可删除)。
相关文章:
- JavaScript美学:;函数foo(){}"vs“;var foo=函数(){}"AMD功能
- 让vs var在nodejs和chrome中的性能
- JavaScript - 通过 URL 传递变量:#var=val vs ?var=val
- javascript hoisting var vs let
- var b = Object.create(a) vs. var b = a
- Javascript 'var variable' in loop vs out out.性能上的任何差异
- Javascript getElementById('id').style VS var x
- Javascript: var myFunc = function() vs. var myFunc = functio
- .bind(this)vs var context=this在Javascript中-what'It’这是最好的
- 相位器框架,这vs var
- var myFunction = function() {}; vs function myFunction() {};
- JavaScript:typeof(var)==='未定义'vs=='未定义'
- & # 39;还是# 39;vs & # 39; var # 39;在javascript for循环中,是否意味着所有
- Var vs let:这个JavaScript片段是如何工作的
- Window vs Var来声明变量
- 对象var vs函数
- let vs var: scopes in for-loop
- 全局var混淆:var a vs window.a
- IIFE:var vs 有什么区别吗?
- 为什么结果不同(使用var vs. let)