变量提拔

变量提拔: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);
})();
    原文作者:晚安职场
    原文地址: https://segmentfault.com/a/1190000006992885
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞