在阅读《javascript高级程序设计》时(page194),介绍了全局变量(在window环境下用var声明的变量)和全局属性(在window对象上直接定义属性)的不同,全局变量不通过delete属性删除,全局属性能被delete删除。但是全局变量又可以通过全局属性这种方式访问。所以就有一点疑惑。两者的作用都差不多,ECMA这种设计的意图是什么?
ECMA
光阴似箭催人老,日月如移越少年。
首先, 强烈推荐这篇post, understand delete
接下来, 我们要知道什么是global object 和 window, execution context, 以及variable object / activation object.
当通过var或者function来定义variable或者function的时候, 他们就变成了Global object的property, 并且他们还带有DontDelete的attribute。 既然他是global object的一个property, 当然可以通过window.aProp来访问拉。
var
function
window.aProp
而, window.foo = 1 这种显示地给对象定义一个property的话, 这个property是不带有DontDelte这个attribute的。
window.foo = 1
只要有DontDelete, 都不可以被delete operator删除。
delete
Reference:
首先, 强烈推荐这篇post, understand delete
接下来, 我们要知道什么是global object 和 window, execution context, 以及variable object / activation object.
当通过
var
或者function
来定义variable或者function的时候, 他们就变成了Global object的property, 并且他们还带有DontDelete的attribute。 既然他是global object的一个property, 当然可以通过window.aProp
来访问拉。而,
window.foo = 1
这种显示地给对象定义一个property的话, 这个property是不带有DontDelte这个attribute的。只要有DontDelete, 都不可以被
delete
operator删除。Reference: