1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

JavaScript 中变量的作用域

本帖由 Ulysses2006-03-12 发布。版面名称:前端开发

  1. Ulysses

    Ulysses New Member

    注册:
    2006-02-05
    帖子:
    10,018
    赞:
    16
    首先考察两段代码:

    PHP:
    <script language="javascript" type="text/javascript">
    <!--
    var 
    myVar "Hi!";
    function 
    tit() {
        
    alert(myVar);
        
    myVar "Hello World!";
        
    alert(myVar);
    }
    window.tit();
    -->
    </
    script>
    PHP:
    <script language="javascript" type="text/javascript">
    <!--
    var 
    myVar "Hi!";
    function 
    tit() {
        
    alert(myVar);
        var 
    myVar "Hello World!";
        
    alert(myVar);
    }
    window.tit();
    -->
    </
    script>
    第一段代码运行后,显示的结果分别是“Hi!”和“Hello World!”,而第二段代码运行后的结果分别是“undefined”和“Hello World!”。

    第一段代码很容易理解,在代码开头,我们定义了全局变量 myVar,并且赋值“Hi!”,在函数 tit() 中,首先显示了该全局变量的内容,即“Hi!”。然后赋予新值并显示这个新值——“Hello World!”。

    但是在第二段代码中,情况就截然不同。首先显示 myVar ,得到“undefined”,表明该变量并没有被初始化。问题就出在 var myVar = "Hello World!";,该语句定义了一个局部变量 myVar,而这个局部变量在函数代码段中任何地方都是有效的,尽管可能在初始化之前就调用了该变量。

    另外要注意的是,函数 tit() 中定义了 myVar 变量,但是这并不会改变全局变量 myVar 的值。

    但是如果如同第一段代码,函数中没有重新定义 myVar 变量,全局变量 myVar 的值就改变了。

    在 window.tit(); 后加上一行 alert(myVar); 得到的结果,分别是“Hello World!”和“Hi!”。