变量提升:javascript的变量提升往往是由内部变量和全局变量命名相同引起的。

例一:

 var v='Hello JS';
 (function(){
 alert(v);
 var v='I love JS';
 })()

alert出来的是undefined,因为在函数内部定义一个和外部变量名称相同的变量时,变量的声明会提升至第一句,赋值则不会变,所以上述语句其实是这样执行的:

var v='Hello JS';
(function(){
var v;
alert(v);
v='I love JS';
})()

本例先定义的是全局变量V,在函数里面又定义了内部变量V,alert(v)执行的时候,实际是先在函数内创建变量v,然后执行。

例二:

(function(){
a = 10;       
alert(window.a);   
var a = 5;
alert(a);          
})();

先打印出undefined,然后打印5
本例中a=10,没有var,这是js中的隐式全局变量,可以通过this 和 window进行访问。因为在函数内部,所以相当于在函数内部也定义了一个内部变量var a=10。内部变量和全局变量重名,内部变量把全局变量覆盖,这样内部变量值是10,外部变量变成undefined,这样通过window去访问,便是undefined。
例二中的执行顺序相当于:

var a = undefined;
(function(){
var a ;
a = 10 ;
alert(window.a);
a = 5;
alert(a);
})();

晚安职场
41 声望1 粉丝