博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

javascript 变量的作用范围

Posted on 2014-04-15 09:58  Hamilton Tan  阅读(611)  评论(0编辑  收藏  举报

来自: http://hanxin0311.iteye.com/blog/181127

1.根据作用范围不同,变量有全局变量和局部变量两种。在函数里定义的变量为局部变量,局部变量只在函数内有效。 如果局部变量和全局变量用相同的变量名,则局部变量将覆盖全局变量。

script>   
    //定义全局变量test   
    var test = "全局变量";    
    function checkscope()   
    {   
        var test = "局部变量";   
        alert(test);   
    }   
    checkscope();    
//在函数里定义的变量为局部变量,局部变量只在函数内有效。   
//如果局部变量和全局变量用相同的变量名,则局部变量将覆盖全局变量   
</script>  

2.JavaScript语言没有块范围。

<script>   
    function test(o)       
    {   
        //定义变量i,变量i的作用范围是整个函数   
            var i = 0;   
        if (typeof o == "object")    
        {   
            //定义变量j,变量j的作用范围是整个函数内,而不是if块内。   
                var j = 5;   
                for(var k = 0; k < 10; k++)   
                {   
                //k的作用范围是整个函数内,而不是循环体内   
                    document.write(k);   
                }   
        }      
        //即使出了循环体,k的值依然存在   
        alert(k + "\n" + j);    
    }   
    test(document);   
</script>  

因为JavaScript语言没有块范围,有时会出现一些非常奇怪的结果:

<script>

    var scope = "全局变量";
    function test()
    {
        alert(scope); 
        var scope = "局部变量";
        alert(scope); 
    }
    test();
//代码第一次输出的scope值并不是"全局变量",而是undefined。知识这是因为scope在test函数中已经被重新定义了,局部变量在test函数中将全局有效,即在scope还没定义之前全局变量scope依然被覆盖。
</script>

变量作用范围在进行HTML事件处理时一样有效:

<script type="text/javascript">
  var x = "全局变量";
</script>

<form action="#" method="get">
<input type="button" value="局部变量" 
  onclick="var x = '局部变量'; alert('输出x局部变量的值:' + x);" />
<input type="button" value="全局变量 " 
  onclick="alert('输出x全局变量的值: ' + x);" />
</form>