JS变量作用域问题

案例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.

原文地址:https://www.cnblogs.com/6long/p/6044505.html