转载:http://www.nowamagic.net/librarys/veda/detail/1623
隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力。
- 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的。
- 无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的。
这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性。属性是可以通过delete操作符删除的,而变量是不能的:
01 | // 定义三个全局变量 |
02 | var global_var = 1; |
03 | global_novar = 2; // 反面教材 |
04 | ( function () { |
05 | global_fromfunc = 3; // 反面教材 |
06 | }()); |
07 |
08 | // 试图删除 |
09 | delete global_var; // false |
10 | delete global_novar; // true |
11 | delete global_fromfunc; // true |
12 |
13 | // 测试该删除 |
14 | typeof global_var; // "number" |
15 | typeof global_novar; // "undefined" |
16 | typeof global_fromfunc; // "undefined" |
在ES5严格模式下,未声明的变量(如在前面的代码片段中的两个反面教材)工作时会抛出一个错误。