关于JavaScript的全局变量的问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 17:39:50
function test()
{
a="hello";
alert(a);
alert(window.a);
var a = "what";
alert(a);
alert(window.a);
}
如果不写后三行,打印出的结果还能理解,但加上后三行,两个window.a的结果就不太明白了,都是undefined,请问这是为什么?谢谢。

在定义变量的时候不加var,则表示变量自动成为全局变量,就相当于你在方法外面已经定义了一个全局变量a,即
function test()
{
a="hello";
alert(a);
alert(window.a);
}
相当于
...
var a;
function test(){
a="hello"; //调用的都是全局变量
alert(a);
alert(window.a);
}
...
但是如果你有一个全局变量a,你在方法里面又定义了一个同名的局部变量a,那么只要是在这个方法里面,a就是指局部变量;如果全局变量a并没有初始化,当你用window.a来调用全局变量a时自然就会是undefined,这就是你加上后三行出现undefined的原因。

function test()
{
a="hello";
alert(a);
alert(window.a);
var a = "what";
alert(a);
alert(window.a);
}
就相当于
var a;
function test()
{
a="hello"; //这里a是局部变量
alert(a);
alert(window.a); //全局变量a并没有初始化,所以是undefined
var a = "what";
alert(a);
alert(window.a);
}

window.a 等于自定义的变量
没有赋值自然是"undefined"
全局变量 a 不是以"window.a"这种形式表达
这种方式来测试可能稍明确一点:
var a = 5;
f