时间:2021-07-01 10:21:17 帮助过:5人阅读
<script type="text/javascript" language="javascript">
var v = 1;
function foo()
{
alert(v);
}
w = 2;
function bar()
{
alert(w);
}
foo();
</script>
运行结果:1 2
另外,在函数内部声明的变量如果不使用var关键字,声明的变量也将是全局变量。如:
代码如下:
<script type="text/javascript" language="javascript">
function foo()
{
v = 1;
}
foo();
alert(v);
</script>
运行结果:1
但是需要注意,这种情况下,若要使用变量,必须先调用声明变量的函数对变量进行初始化, 如foo(),否则,将会出现“变量v未定义”的错误。
全局变量将作为window对象的属性存在,因为可以 通过window.$($表示变量名)访问。当然也可以通过变量名直接访问。下面会讲到为什么有这两种访问方式。
在函数内部通过var关键字声明的变量将是函数级别的变量,其作用域仅仅限于函数内部。如:
代码如下:
<script type="text/javascript" language="javascript">
function foo()
{
var v=1;
alert(v);
}
alert(v);
</script>
运行结果:1 变量“v”未定义
通过上面的分析,可以发现关键字var主要作用 是定义函数级别的变量。
细心的朋友可以会问,如果在函数内部和外部定义了相同的变量,会是什么样的结果呢?如:
代码如下:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
alert(v);
var v=2;
}
foo();
</script>
运行结果:undefined
!!!!!也许有人会比较郁闷了,v明明白白的定义在函数foo()体外,为什么会是 undefined呢?这就涉及到javascript的解析了。根据经验,javascript对于函数体内变量的解析过程是:
搜索所有的 var关键字,将其变量声明放到函数体的最前面,赋值和使用仍然保持不变,这样,上面的javascript实际上是等同于:
代码如下:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
var v;
alert(v);
v=2;
}
foo();
</script>
照此分析,产生上述 的结果就显而易见了,由于函数内部的变量的优先级高于全局变量的优先级(大部分的编程语言都是这样), 函数内部的变量v覆盖了全局变量v,但是由于在使用函数内部变量v时,它仅仅声明,但未赋值,因此结果是undefined。
如果在方法 体内仍然要使用定义的全局变量v,window对象此时派上大大的用场了,可以通过window.v来访问。如:
代码如下:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
alert(window.v);
alert(v);
var v=2;
}
foo();
</script>
运行结果:2 undefined