网上看到了一个题目,感觉很不错,在这里记录一下:
(function(){
a = 5;
alert(window.a); //这里打印"undefined"
var a = 10;
alert(a); //这里打印10
})();
相当于如下的过程:
var a=undefined;//这里由于函数中a声明时没有带var,添加到全局环境中,而初始化不会被添加到全局。
(function(){
var a; //变量提升,这里是var a=10的提升,属于局部变量,默认值是undefined
a = 5; //因和局部变量名相同,因此全局变量a被覆盖,此处变成了给局部变量a赋值
//alert(a); 弹出5
//a只是变量,而不是属性 alert(a in window)返回false
alert(window.a); //弹出全局环境的变量a,为"undefined"
a = 10;
alert(a);
})();