JS中隐含全局变量与明确定义的全局变量有细微的不同,不同之处在于能否使用delete操作符撤销变量。
- 使用var创建的全局变量(这类变量在函数外部创建)不能删除。
- 不使用var创建的隐含全局变量(尽管它是在函数内部创建)可以删除。
这表明隐含全局变量严格来讲不是真正的变量,而是全局对象的属性。属性可以通过delete操作符删除,但变量不可以。
// 定义三个全局变量
let global_var = 1;
global_novar = 2;
(function(){
global_fromfunc = 3;
}());
// 企图删除
delete global_var;
delete global_novar;
delete global_fromfunc;
// 测试删除情况
console.log(typeof global_var); //"number"类型
console.log(typeof global_novar); //"undefined"类型
console.log(typeof global_fromfunc); //"undefined"类型
参考资料:《JavaScript 模式》 Stoyan Stefanov 著 陈新 译
网友评论