案例1:
var a = 1;
function test1(){
var a = 2;
}
console.log("a = " + a);//== 1
1.输出原因:未调用test1(),使得var a= 2,未运行.所以输出结果为1.
案例2:
var b = 1;
function test2(){
var b = 2;
}
test2();
console.log("b = " + b);//==1
2.此处调用了函数test2,1),输入结果为:1 ,因为 var a= 2 是在函数体test2()内定义的,在JavaScript中,变量的作用域为函数体,故,此处a=2的,对函数外部无影响.
案例3:
var c = 1;
function test3(){
c = 2;
}
test3();
console.log("c = " + c);//==2
3.此处输出结果为: 2, 因为这里test3内部并未重新定义c,而是直接给c赋值,被赋值的c寻找下看改变了哪个c的值,发现函数内部再无c,就扩大范围到函数外面寻找(变量提升),直接把最开始的c值改变.
案例4:
var d = 1;
function test4(d){
d = 2;
console.log("d = " + d)//==2
}
test4(d);
console.log("传参d后 :d = "+d);//==1
var f = 1;
function test5(e){
f = 2;
}
test5(f);
console.log("传参f后: f = " + f);//==2
4.此处,函数体test4的内部输出2,外部输出1,比案例3多了传参,还是变量提升问题,test4内部的d被赋值后,先在函数test4内部寻找d,找到参数d,停止继续寻找.在test5中,f在函数内部找不到f,向外寻找f,改变f的值为2.