js中全部变量与局部变量的问题与闭包

在javascript中,全部变量与局部变量是新手们最容易接触到的问题,今天就来讲一下全局变量与局部变量的差异:


先来说一下闭包这个概念,闭包是指子函数使用父函数的局部变量,即function使用了function本身之外的函数。


全局变量可理解为在函数外声明,但在函数中调用依然可以获得,即

<script type="text/javascript">
var a = 'z';
function test(){
alert(a);
}
test();
</script>

此处 a 是在function外声明的,但使用function时,任可获得,证明全局变量也可在函数中使用。




局部变量可理解为在某函数内声明,且只能在声明的那个函数中使用,即

<script type="text/javascript">
var a = 'z';
function test(){
var a = 'x';
alert(a);
}
test();
alert(a);
</script>

此时运行代码 ,可发现会弹出两次对话框,一次为 z, 一次为 x,因为根据顺序结构,此处先调用了function test中的alert(a),且弹出结果为z,之后再运行外面的aler(a),而外面的a = 'x',故结果为先 z ,其次为 x


可见,在函数中声明局部变量只会影响函数内的变量,并不会影响到外面的全局变量,即使他们变量名相同。



那么我们来做一道题,代码如下

<script type="text/javascript">  
  var a = 'z';  
  function test(){  
  var a;
    alert(a);  
    a = 'x';  
    alert(a);  
  }  
  test();
  alert(a);
</script>


此题运行结果为 undefined、x和z ,因为在函数中再次声明了a,但没有赋值,故第一次结果为undefined ,接下来a='x',第二次结果就为x,第三次alert(a)中的a为全局变量的a,故结果为z。再次证明局部变量不会影响全局变量。



然而我在浏览别人的文章时发现下面这段代码,然而这段代码和上面所说并不相同

<script type="text/javascript">   
var a =1;  
function test(){  
alert(a);  
var a = 2;  
alert(a);  
}  
test();  
alert(a);  
</script>  


此题根据以上思路,根据顺序结构,先弹出 1 ,其次弹出 2 ,最后弹出 1,然后运行代码后发现,结果为undefined,2,1

这是我觉得奇怪的一点,至于为什么可去@zyz511919766的博客看

http://blog.csdn.net/zyz511919766/article/details/7276089  此为链接


谢谢观看

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值