隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete
操作符让变量未定义的能力。
- 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。
- 无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。
var f1 = 1;
f2 = 2;
(function(){
f3 = 3
})();
delete f1;
delete f2;
delete f3;
typeof(f1); // number
typeof(f2); // undefined
typeof(f3); // undefined
Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)
Object.getOwnPropertyDescriptor(window, 'f1')
{value: 1, writable: true, enumerable: true, configurable: false}
Object.getOwnPropertyDescriptor(window, 'f2')
{value: 2, writable: true, enumerable: true, configurable: true}
可以看到f1的configurable为false,不能被删除;
网友评论