Javascript变量似乎没有进入DOM

Javascript变量似乎没有进入DOM,javascript,dom,Javascript,Dom,那么,为什么年份不输入dom以进行警报读取呢?您的变量声明: <head> <script> function setParams() { var year = "2011"; } function showYear() { alert("The year is " + year); } </script> </head> <body> <input type="submit" onclick="setParam

那么,为什么年份不输入dom以进行警报读取呢?

您的变量声明:

<head>
<script>
function setParams() {
    var year = "2011";
}

function showYear() {
    alert("The year is " + year);
}
</script>
</head>
<body>
<input type="submit" onclick="setParams();" value="Set" />
<input type="submit" onclick="showYear();" value="Year" />
</body>
是一个局部变量,仅在声明它的函数中可见

如果希望它全局可见,以便其他函数可以访问它,则必须将其声明为全局变量,并在任何函数之外的作用域顶级声明它:

var year = "2011";
根据定义,函数中声明的变量是局部变量,并且仅在该函数中可用

最后,您可能不太了解DOM是什么。文档对象模型和术语的DOM标准用于表示网页中的对象。这里要问的是javascript全局变量语法,它与DOM是分开的

希望这不会让您感到困惑,但为了答案的完整性,全局Javascript变量和DOM可能连接的一个地方是,在web浏览器中,窗口对象上也可以使用全局变量。因此,在我上面的代码示例中,您访问年份为:

var year;

function setParams() {
    year = "2011";
}

function showYear() {
    alert("The year is " + year);
}
或作为:

function showYear() {
    alert("The year is " + year);
}
如果年份是全局变量,则两者在web浏览器中给出相同的结果

function showYear() {
    alert("The year is " + window.year);
}
表示年的范围是它在其中声明的函数的本地范围


在函数之外声明它。或者删除var关键字,这也使其成为全局的。

年份的作用域是函数setParams,在该函数之外无法访问

您可以将函数更改为

var year = "2011";
这样就可以全局访问年份变量

但不一定是最佳实践

查看Douglas Crockford的模块模式,了解管理全局变量和函数的有用方法:

var year = "2011";

您的年度风险值将需要一个全局范围,以便您可以在其他函数中访问它,即您在函数之外定义它。例如:

function setParams() {
 year = "2011";
}

该死的,我刚打字你就到了当你点击一个按钮时,它会发回页面?你能解释一下它是如何工作的吗?这:表示bar没有定义。隐式声明的globals肯定不是一个好的实践,因为它们很容易在无意中创建bug。我永远不会推荐它们。@m90在您的JSFIDLE中,您还没有调用foo函数@Paul-全局变量有很好的正当理由,并且有安全的方法在全局对象下命名它们的作用域。我认为全球化通常是最后的选择,但偶尔也会找到正确的解决方案。我从不使用隐式全局变量,因为那只是一颗等待爆炸的炸弹。@Jfriend00 fair point。。。m90模块模式有一个很好的解释,它为您提供了一个管理全局可访问变量和函数的好方法,这有助于避免覆盖/重用您在js中从未想过的东西。。。如果您的脚本/应用程序非常简单,那么很值得实现:我知道它会这么简单!但当我在google上搜索全局js变量时,我看到一些东西说它们不存在。