js全局变量与局部变量问题,变量提升

1、程序的运行结果为:100  10  100

var a = 10;
function test(){
    a = 100;
    console.log(a);
    console.log(this.a);
    var a;
    console.log(a);
}
test();

解析:Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),从而确定变量的作用域,所以在函数test执行前,由于第6行声明了局部变量a,所以函数内部的a都指向已经声明的局部变量,所以第4行输出100。第5行输出this.a,我们都知道,函数内部的this指针指向的是函数的调用者,在这里函数test被全局对象调用,所以this指针指向全局对象(这里即window),所以this.a = window.a,一开始生命了全局变量a=10,所以第5行输出结果为10。第7行输出结果为100,因为局部变量a在第3行已经被赋值了100,所以直接输出局部变量a的值。

2、程序的运行结果为:undefined  10

var a = 100;
function test(){
    console.log(a);
    var a = 10;
    console.log(a);
}
test();

解析:看了第1个例子,可能有同学会认为输出结果是10  10,但是结果却不是10 10,为什么呢?仔细看第1个例子解析的第一句话,Javascript在执行前会对整个脚本文件的声明部分做完整分析(包括局部变量),但是不能对变量定义做提前解析,在这个函数中,执行第3行前,可以认为已经声明了变量a,但是并没有定义(这里即赋值),所以第3行输出结果为undefined,执行第4行a =10后,变量a的值就为10,所以第5行输出结果为10。

3、程序的运行结果为:100  10  10

var a = 100;
function test(){
    console.log(a);
    a = 10;
    console.log(a);
}
test();
console.log(a);

解析:我们知道在函数内部,一般用var声明的为局部变量,没用var声明的一般为全局变量,在test函数内,a=10声明了一个全局变量,所以第3行的a应该输出全局变量的值,而在函数执行之前已经声明过一个全局变量并赋值100,所以这里第上输出100。第4行给全局变量a 重新赋值10,所以全局变量a的值变成10,所以第5行输出10。而在函数test外部,第8行输出全局变量a的值,因为全局变量被重新赋值为10,所以输出结果即为10。

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//if DATAPERIOD>=1 and dataperiod<=8 then begin if DATAPERIOD=0 then minbi:="fbase.var2#min1"; if DATAPERIOD=1 then minbi:="fbase.var2#min5"; if DATAPERIOD=2 then minbi:="fbase.var2#min30"; if DATAPERIOD=3 then minbi:="fbase.var2#min60"; if DATAPERIOD=4 then minbi:="fbase.var2#day"; if DATAPERIOD=5 then minbi:="fbase.var2#day"; if DATAPERIOD=6 then minbi:="fbase.var2#week"; if DATAPERIOD=7 then minbi:="fbase.var2#month"; if DATAPERIOD=8 then minbi:="fbase.var2#year"; var1:="chzhshch@kxian"; var2:="chzhshch@bi";{处理笔关系} pre:=2; {设置小数点位数} if STKTYPE=0 then pre:=1; if STKTYPE=11 then pre:=3; a1:=barslast(var20); a2:=ref(var2,a1); aa1:=ref(a1+1,1); aa2:=ref(a2,1); a3:if (aa2>0,l-ref(h,aa1),h-ref(l,aa1)),linethick0;{计算点位差} drawnumber(var2=1,h,h,pre),pxup20,color3300ff; {显示数字} drawnumber(var2=-1,l,l,pre),pxdn5,colorffff00,align0; //显示周期 drawtext(var2=1,h,'T'),pxup65,coloryellow,align1; drawnumber(var2=1,h,aa1,0),coloryellow,pxup65,align2; drawtext(var2=-1,l,'T'),pxdn50,coloryellow,align1; drawnumber(var2=-1,l,aa1,0),coloryellow,pxdn50,align2; var3:="chzhshch@tongji"(minbi);{同级别分解} zg:="chzhshch@zg"(var3);//一定要先调用ZG zd:="chzhshch@zd"(var3); //以背景块的形式画中枢 stickline(zg>zd,zg,zd,10,0),color000055; drawline(var2=1,h,var2=-1,l,0),linedot,coloryellow; drawline(var2=-1,l,var2=1,h,0),linedot,coloryellow; drawline(var3=1,h,var3=-1,l,0),colorFF6600; drawline(var3=-1,l,var3=1,h,0),colorFF6600; //以框的形式画中枢 stickline(zg>zd and zgref(zg,1),zg,zd,2,0),COLORMAGENTA; stickline(zg>zd and zgrefx(zg,1),zg,zd,2,0),COLORMAGENTA; drawline(zg>zd and zgref(zg,1),zg,zg>zd and zgrefx(zg,1),zg,0),COLORMAGENTA; drawline(zg>zd and zdref(zd,1),zd,zg>zd and zdrefx(zd,1),zd,0),COLORMAGENTA; end; //kline(o,h,l,c,1); STICKLINE(C>=O,O,C,8,0),COLOR0000AA; STICKLINE(C>=O,O,C,7,0),COLOR0011BB; STICKLINE(C>=O,O,C,6,0),COLOR0022CC; STICKLINE(C>=O,O,C,5,0),COLOR0033DD; STICKLINE(C>=O,O,C,4,0),COLOR0044EE; STICKLINE(C>=O,O,C,3,0),COLOR0055FF; STICKLINE(C>=O,O,C,2,0),COLOR0066FF; STICKLINE(C>=O,O,C,1,0),COLOR0077FF; STICKLINE(C>=O,C,H,0,0),colorred; STICKLINE(C>=O,O,L,0,0),colorred; STICKLINE(C<O,C,O,8,0),COLOR00AA00; STICKLINE(C<O,C,O,7,0),COLOR00BB11; STICKLINE(C<O,C,O,6,0),COLOR00CC22; STICKLINE(C<O,C,O,5,0),COLOR00DD33; STICKLINE(C<O,C,O,4,0),COLOR00EE44; STICKLINE(C<O,C,O,3,0),COLOR00FF55; STICKLINE(C<O,C,O,2,0),COLOR00FF66; STICKLINE(C<O,C,O,1,0),COLOR00FF77; STICKLINE(Cma5,1,0); tmp2:=if(c>ma13,1,0); tmp3:=if(c>ma21,1,0); tmp4:=if(c>ma34,1,0); tmp5:=if(c>ma55,1,0); tmp6:=if(c>ma89,1,0); tmp7:=if(c>ma144,1,0); tmp8:=if(c>ma233,1,0); LEI:tmp1+tmp2+tmp3+tmp4+tmp5+tmp6+tmp7+tmp8+1,linethick0; N1:=BARSLAST(var20); x1:=llv(LEI,N2); x2:=HHV(LEI,N1); 类别:if(N1>N2,X1,X2),LINETHICK0; DRAWTEXT(ISLASTBAR,h*1.1,'类别 '+NUMTOSTR(类别,0) +' ')ALIGN2,LINETHICK3,Color00fff {原文链接:http://www.55188.com/thread-6885035-1-1.html}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值