变量提拔: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); })();