javascript 中的变量作用域问题

使用javascript定义变量的时候我发现了很多令人匪夷所思的问题。

首先是定义全局变量的方法:

    1)使用var a =100;来定义,这种定义方法需要var a =100;出现在函数的外面。如果进入了函数内部就变成了局部变量了。

    2)使用 a=100;直接定义,这样定义即使是在函数内部定义也会被识别为全局变量的,但是一定要让程序运行过a=100这句话后才被声明赋值,他的作用于是在运行过这句话之后。还有一点和var a =100;不同的地方

function func2()
{
    alert(b);
    b=100;
}

这个方法无法运行,但是改成下面这个方法就可以运行了

var a = 100;
var b = 200;

function func1(){
    alert(a);
    var a= 500;
    alert(a);
    alert(b);
}
func1();

输出的结果尽然为 undefine,500,200。

    我已经定义了一个全局变量a并赋了100,但是在func1中的第一个alert竟然输出了undefine(声明但没赋值,要是没有声明第一个alert不会弹出来),这说明全局变量a在func1中并没有起到作用,如果去掉了func1中的var a=500,结果就会是100,100,500了,这样就对了,这就说明func1中定义的a影响了全局中的a,并使它无法再func1中起作用。但是这就有引出了一个新的问题,如果全局的a没有在func1中起到作用,那么为什么第一个alert(a)会输出undefine的呢?他的声明是在alert(a)之后的,按常理来判断应该是不会弹出任何界面的。这也就是说下面的var a=500这句话中a的声明是在func1运行前就已经声明好了,但是赋值确是在var a =500是才附上的。

    所以说程序在调用函数是实现将函数中所有的变量声明先运行(声明和赋值在运行的时候分开了),然后逐行进行接下来的操作(包括声明之后的赋值)。这样一来就解释通了。

转载于:https://www.cnblogs.com/hfliu/archive/2013/04/11/3015037.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值