在js中定义的全局变量是挂在window下的,而window的属性也一样,那么这两者有什么区别呢?
其实这两者还是有小小的区别的,全局变量是不能通过delete操作符删除的,而直接定义在window上的属性是可以删除的。
那么为什么全局变量不能删除呢?
因为全局变量也是个对象,这个对象时通过叫做PropertyDescriptor来定义的。
可以在浏览器中调用Object.getOwnPropertyDescriptor(对象, 属性)来查看
举例:
var test = 2; window.test; // 2 Object.getOwnPropertyDescriptor(window, "test") //Object {value: 2, writable: true, enumerable: true, configurable: false}
大家可以看到最后一行有configurable的特性,这个特性决定了该属性是不能被删除的。