JavaScript中的局部和全局变量
今天,我开始编写一个页面,提示用户选择他们的PC规格,代码如下JavaScript中的局部和全局变量,javascript,Javascript,今天,我开始编写一个页面,提示用户选择他们的PC规格,代码如下 <html> <title>Computer Specification Chooser</title> <head> <script type="text/javascript"> var compSpec = document.compChooser; functio
<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 want included in 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>
计算机规格选择器
var compSpec=document.compChooser;
函数处理器不可用\u onclick()
{
警报(“对不起,处理器速度当前不可用。”);
compSpec.processor[2]。选中=true;
}
勾选希望包含在计算机中的所有组件
DVD-ROM
只读光盘存储器
压缩驱动器
选择所需的处理器速度
3.8千兆赫
4.8千兆赫
6GHz
我面临的问题是与事件处理程序关联的函数。当我尝试选择处理器值4.8 GHz的单选按钮时,是的,它会用函数内的消息提醒我,但在这之后,它不会在函数内执行下一条语句,即检查下一个处理器值6 GHz
我尝试对其进行更改和测试,发现当我将var compSpec=document.compChooser
设置为函数中的局部变量而不是全局变量时,可以执行下一条语句
但是我认为对于一个全局变量,它可以在页面上的任何地方访问,也可以在函数中访问。但是为什么现在我不能在我的函数中访问它呢
此外,我在谷歌搜索时偶然发现了一篇奇怪的文章。它表示在创建全局变量时,会将其添加到
窗口
对象中。为什么会发生这种情况?它的好处和用途是什么?您的问题是这一行:compSpec=document.compChooser
当此代码运行时,表单还不是DOM的一部分,因此compSpec
是未定义的
将代码放在文档的末尾或在onload处理程序中运行,它就会工作。在JavaScript中,全局变量是全局对象的属性。在浏览器中运行时,全局对象是
窗口
对象。因此,如果不使用var
关键字,实际上并不是在声明变量,而是在设置窗口
对象的属性。它很有用,因为窗口
对象可以从任何地方访问,全局变量也是如此
如果将compSpec
声明为processorUnavailable\u onclick
函数中的变量(var
),则其范围将限于该函数(以及在该函数中创建的闭包)。如果将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()">...
function body_onload()
{
window.compSpec=document.compChooser;
}
函数处理器不可用\u onclick()
{
警报(“对不起,处理器速度当前不可用。”);
window.compSpec.processor[2]。选中=true;
}
......
最后我知道问题出在解析上,但另一个问题是??为什么在创建函数之前调用函数时,仍然可以执行它??这是一个好问题,这里有一些好的答案:title
标记不应该在head
标记内吗?