首页 > 全局变量和全局属性的思考

全局变量和全局属性的思考

在阅读《javascript高级程序设计》时(page194),介绍了全局变量(在window环境下用var声明的变量)和全局属性(在window对象上直接定义属性)的不同,全局变量不通过delete属性删除,全局属性能被delete删除。但是全局变量又可以通过全局属性这种方式访问。所以就有一点疑惑。两者的作用都差不多,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来访问拉。

而, window.foo = 1 这种显示地给对象定义一个property的话, 这个property是不带有DontDelte这个attribute的。

只要有DontDelete, 都不可以被delete operator删除。

Reference:

【热门文章】
【热门文章】