您的位置:首页 > Web前端 > JavaScript

JS变量作用域问题

2016-10-23 18:49 260 查看
案例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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 变量提升