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

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

阅读 6.1k
1 个回答

首先, 强烈推荐这篇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:

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题