var a,b;
(function(){
alert(a);
alert(b);
var a=b=3;
alert(a);
alert(b);
})();
alert(a);
alert(b);
这个代码输出来的是,undefined,undefined,3,3,undefined,3
首先js代码往下执行,由于遇到的是一个立即执行函数所以说会先执行立即执行函数中的代码,
1、alert(a)由于他会在局部中寻找变量a但是就说是找到了 var a=b=3;这句话,这句话就等于var a = 3;b = 3;所以说他的a知识定义了但是还没有赋值,所以他会到全局里面去找找到的就是undefined
2、alert(b)由于虽然说 var a=b=3;有这话,但是声明可以提升,赋值不可以提升,所以他回输出undefined
3、 alert(a); alert(b);这两个会输出两个3,会出来的是局部的a,b
4、alert(a)由于它会输出的是全局的变量a所以说它会输出undefined
5、在立即执行函数中有 var a=b=3;也就是说a是局部的b是全局的,这样的话局我会在这里面给b赋上值3。这时候就会输出来3