全局变量在整个 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>
运行结果为:注意,如果省略掉 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>
输出结果为:
比较一个变量优先级的例子:
[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>
运行结果:可能有人会认为,第 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. 在嵌套函数中,当前函数中定义的变量可以在所有的嵌套函数中使用,但嵌套函数中定义的变量不能在父级或父级以上的函数中使用。 |