首页 >社区问答列表 >javascript - 全局变量和全局属性的思考

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

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

  • 怪我咯
  • 怪我咯    2017-04-10 14:43:191楼

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

    • understand delete
    • MDN - delete

    +0添加回复

  • 回复