曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4028|回复: 0
打印 上一主题 下一主题

使用变量的注意点

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-4-11 12:26:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
全局变量在整个 JavaScript 代码中都能使用,它通常在函数体外定义(函数体内也能定义全局变量)。

局部变量通常在函数体内定义,它的作用范围只在函数体内。在函数体内定义的变量不能在函数体外引用,也不能在其它函数的函数体内使用。

定义变量有下面两种方式:

1. 使用 var 关键字定义变量,如 var myret;

2. 不使用 var 关键字,而是直接通过赋值的方式定义变量,如 myret = "hello world";

使用第 1 种方式定义变量,既可以定义全局变量,也可以定义局部变量,这取决与变量的位置。在函数体内使用 var 关键字定义的变量为局部变量,在函数体外使用 var 关键字定义的变量为全局变量。

使用第 2 种方式定义的变量为全局变量,不论是在函数体内还是函数体外定义,比如:
[JavaScript] 纯文本查看 复制代码
<script type="text/javascript" language="javascript">
<!--
    function myfunc () {
        myret = "hello world";
        document.write(myret);
    }
    myfunc();
    document.write("<br>", myret);
    
-->
</script>

运行结果为:
hello world
hello world
注意,如果省略掉 myfunc() 函数的调用而直接使用其下的 document.write() 语句那么就会出错。因为你没有调用函数,那函数也只是一个定义,并不会因此生成一个全局的 myret 变量。

使用变量需要注意下面几点:

1. 必须先定义后使用。

2. 允许为未定义的变量赋值。虽然不能直接使用未定义的变量,但可以直接给未定义的变量赋值,赋值后,JavaScript 就自动定义该变量了,并且会作为全局变量出现。

3. 允许重复定义变量。每次定义变量的语句都是有效的,最后一次的定义和赋值,将成为变量的最新类型。

4. 在定义了变量之后,就可以引用该变量。需要注意的是,定义了但没有赋值的变量,默认的值为 undefined 。

5. 先引用变量,再进行定义,不会是个错误,但被引用的变量的值为 undefined ,比如:
[JavaScript] 纯文本查看 复制代码
<script type="text/javascript" language="javascript">
<!--
    document.write(myret, "<br>");
    
    var myret = 100;   //上面先使用,这里再赋值,即一处定义,随处生效
    
    document.write(myret, "<br>");
    
-->
</script>

输出结果为:
undefined
100

比较一个变量优先级的例子:
[JavaScript] 纯文本查看 复制代码
<script type="text/javascript" language="javascript">
<!--
    var myret = 100;
    
    function myfunc() {
        document.write(myret, "<br>");
        
        var myret = 200;
        
        document.write(myret, "<br>");    
    }
    myfunc();
    
-->
</script>

运行结果:
undefined
200
可能有人会认为,第 1 条应该输出 100 ,但事实这并不正确。因为在函数 myfunc() 里面也定义了同名局部变量 myret,而局部变量的优先级高于全局变量,因此输出的是 undefined ,而不是 100 。上面的代码等价于:
[JavaScript] 纯文本查看 复制代码
<script type="text/javascript" language="javascript">
<!--
    var myret = 100;
    
    function myfunc() {
                                           
                                           var myret;

        document.write(myret, "<br>");
        
        myret = 200;
        
        document.write(myret, "<br>");    
    }
    myfunc();
    
-->
</script>


6. 在嵌套函数中,当前函数中定义的变量可以在所有的嵌套函数中使用,但嵌套函数中定义的变量不能在父级或父级以上的函数中使用。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-11-1 08:34 , Processed in 0.077760 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表