javscript函数内变量声明提前

这些天,公司一直与我们分享javascript的知识,我也把我学习到的分享出来,有写的不对的,请指教,勿喷,^_^。

今天要说的是:javascript函数内所有变量声明提前。在说明结论之前,一般先举个例子以做证明。


example 1:

function example1(){
   var x = "hello world";
   console.log(x);//line 1
}
example1();

毫无疑问,结果肯定会是输出:hello world


example 2:

function example2(){
   console.log(x);//line 1
   var x = "hello world";
   console.log(x);//line 2
}
example2();
此时,大家猜想一下line 1与line 2处输出结果分别会是什么?我的猜想是,line1 处会抛一个 x is not defined 的错误,程序后面不会执行。因为根据以往的经验,变量在未定义前不能使用。但是运行结果是,line 1: undefined , line 2 : hello world. 大家可以肯定的是line 2会输出: hello world , 但是line 1是怎么回事。

原因是,在javascript中,函数内的所有变量声明会被提前。以下example 3example 2作用是一样的。


example 3:

function example3(){
   var x;
   console.log(x);//line 1
   x = "hello world";
   console.log(x);//line 2
}
example3();

由于变量x被提前声明了,所以line 1会输出 undefined, 变量x没有赋值,但是不会报错。line 2是赋值后的结果,所以输出正确结果:hello world


example 4:

var x = "global";
function example4(){
   console.log(x);//line 1
   var x = "hello world";
   console.log(x);//line 2
}
example4();
console.log(x);//line 3

在这里定义了相同名字的全局变量 x , 刚开始我猜想的运行结果结果是,line 1: global , line 2 : hello world ,line 3:hello world,但是运行结果不是这样子的。

运行结果是,line 1: undefined , line 2: hello world,line 3:global

原因是,javascript使用函数管理作用域,变量在函数内声明,如果函数内外有相同变量的声明,最终是依据函数内的变量,且函数内声明的变量只在函数内有效。上面的例子过程是,函数example4被调用的时候,函数内所有变量声明提前,所以函数内变量x声明提前. 函数外部的全局变量x没有被改到,所以结果还是global

注意:声明提前了,但是赋值动作不会提前


exmple 5:

function example5(){
    for(var i = 0;i < 10;i++);
    for(var j = 0;j < 10;j++);
    console.log("i:"+i);//line 1
    console.log("j:"+j);//line 2
}
example5();
一开始我猜想的结果是line 1与line 2都输出 undefined,但是运行的结果是line 1 与 line 2都输出10.

此处涉及有两个方面,

1):javascript中没有代码块作用域,所以在for循环代码块中声明的变量i与j,它们的作用域是整个example 5函数。

2):  变量声明提前了,相当于在函数刚开始的时候,是先声明变量i 与 j,代码是: var i,j;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值