javascript中的局部变量和全局变量

时间:2010-06-15 07:55:04

标签: javascript

今天,我开始编写一个页面,提示用户选择他们的PC规格,代码如下

<html>
<title>Computer Specification Chooser</title>

<head>

<script type="text/javascript">

var compSpec = document.compChooser;

function processorUnavailable_onclick()
{
 alert("Sorry that processor speed is currently unavailable");
 compSpec.processor[2].checked = true;

}

</script>

</head>

<body>

<form name="compChooser">

<p>Tick all components you wan included on your computer</p>

<p>
DVD-ROM

<input type="checkbox" name="chkDVD" value="DVD-ROM" />
<br />

CD-ROM
<input type="checkbox" name="chkCD" value="CD-ROM" />
<br />

Zip Drive
<input type="checkbox" name="chkZIP" value="ZIP DRIVE" />
</p>

<p>
Select the processor speed you require
<br />

<input type="radio" name="processor" value="3.8" />
3.8 GHZ

<input type="radio" name="processor" value="4.8" onclick="processorUnavailable_onclick()" />
4.8 GHZ


<input type="radio" name="processor" value="6" />
6 GHZ
</p>

<input type="button" name="btnCheck" value="Check Form" />

</form>

</body>
</html>

我面临的问题是我与事件处理程序绑定的功能,当我尝试选择处理器值为4.8 GHZ的单选按钮时,是的它提醒我函数内部的消息,但是之后,它不会执行函数内的下一个语句,即检查下一个处理器值为6 GHZ。

我已经尝试改变它并对其进行测试,并找出当我将var compSpec = document.compChooser设置为函数内的局部变量而不是全局变量时,可以执行下一个语句。 / p>

但是我想一个全局变量,它可以在页面的任何地方访问,也可以在函数内部访问。但是为什么现在我无法在我的函数中访问它?任何想法?

此外,我在google搜索时偶然发现了一篇奇怪的文章,它说当创建一个全局变量时,它会被添加到window对象中。我只是好奇为什么会发生这种情况?它有什么好处和用途?< / p>

谢谢你

2 个答案:

答案 0 :(得分:2)

在javascript中,全局变量是全局对象的属性。在浏览器中运行时,全局对象是window对象。因此,如果您不使用var关键字,则实际上并未声明变量,而是设置window对象的属性。它很有用,因为window对象可以从任何地方访问,您的全局变量也是如此。

如果在compSpec函数中将var声明为变量(processorUnavailable_onclick),则其范围将仅限于该函数(以及在其中创建的闭包)。如果将compSpec设置为全局变量(即window的属性),那么它将随处可用:

function body_onload()
{
 window.compSpec = document.compChooser;
}

function processorUnavailable_onclick()
{
 alert("Sorry that processor speed is currently unavailable");
 window.compSpec.processor[2].checked = true;
}

...<body onload="body_onload()">...

答案 1 :(得分:1)

您的问题就在这一行:compSpec = document.compChooser

当此代码运行时,表单还不是DOM的一部分,因此compSpec未定义。 将代码放在文档末尾或在onload处理程序中运行它就可以了。