变量没有块级作用域

  注意:在javascipt中变量没有块级作用域。
和c,c++以及java不同,javascript没有块级作用域。函数中声明的所有变量,不论是在哪里声明的,在整个函数中他们都是定义的。在下面函数中,变量,i,j,k的作用域相同,他们在整个函数都是定义的。如果这段代码使用c,c++或java编写,情况就不是这样的了。
ContractedBlock.gif ExpandedBlockStart.gif
ExpandedBlockStart.gifContractedBlock.giffunction test(o)dot.gif{
InBlock.gif    
var i= 0;                                                //在整个函数中i都有定义
ExpandedSubBlockStart.gifContractedSubBlock.gif
    if (typeof o=="object")dot.gif{                    
InBlock.gif        
var j=0;                                            //j不仅在块中有定义,在这个函数都有定义。
InBlock.gif
        for (var k=0;k<10 k++; )                //k不仅在块中有定义,在这个函数都有定义。
ExpandedSubBlockStart.gifContractedSubBlock.gif
        dot.gif{
InBlock.gif            document.write(k);                    
//k仍旧有定义输出10
ExpandedSubBlockEnd.gif
        }

InBlock.gif        document.write(k);                        
//k仍旧有定义输出10
ExpandedSubBlockEnd.gif
    }

InBlock.gif    document.write(j);                            
//j仍旧有定义,不过没有初始化。
ExpandedBlockEnd.gif
}
这一规则(即函数中声明的所有变量在整个函数中都有定义)可以产生惊人的结果。
下面代码说明了这一点。
None.gif var  scope  = " global "  ;
None.gif
function  f()
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif   alert(scope) ;           
//显示undefined,而不是“global”
InBlock.gif
   var scope ="local" ;     //这里是初始化,不过在整块函数中都是可见的。
InBlock.gif
   alert(scope)             //显示"local" 
ExpandedBlockEnd.gif
}

None.giff();
你可能认为对alert()的第一次调用会显示出“global”,因为声明局部变量的var 语句还没有执行。但是,由于这个作用域规则的限制,输出的并不是“gobal”。局部变量在整个函数体内都是有定义的, 这就意味着在整个函数体中都隐藏了同名的全局变量。虽然局部变量在整个个函数体中都是有定义的,但是在执行var语句之前,它是不会被初始化的。
同时这个例子也说明了为什么将所有的变量声明放在程序开头是个好的习惯

转载于:https://www.cnblogs.com/changmao99/archive/2007/06/04/770861.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值