定义全局变量与在window对象的差别

定义全局变量与在window对象的差别
定义全局变量与在 window 对象上直接定义属性差别。
 
1、全局变量不能通过 delete 操作符删除;而 window 属性上定义的变量可以通过 delete 删除
 
var num=123;
window.str="string";
delete num;
delete str;
console.log(num); //123
 
console.log(str); //str is not defined
//全局变量不能通过 delete 删除,因为通过 var 定义全局变量会有一个名为 [Configurable] 的属性,默认值为 false,所以这样定义的属性不可以通过 delete 操作符删除
2、访问未声明的变量会抛出错误,但是通过查询 window 对象,可以知道某个可能未声明的变量是否存在。
 
var newValue=oldValue; // 报错:oldValue is not defined
var newValue=window.oldValue; // 不会报错
console.log(newValue); // undefined
3、有些自执行函数里面的变量,想要外部也访问到的话,在 window 对象上直接定义属性。

推荐阅读