我在这里阅读了一些关于在定义新变量时使用var
关键字的帖子。这些帖子提到了如何在函数中使用var
创建具有局部作用域的变量,而不使用var
关键字创建具有全局作用域的变量。大多数帖子建议始终使用var
。我有几个问题:
我正在学习JS,我正在尝试编写一个脚本来计算按钮被点击的次数(参见下面的代码)。如果在函数else
的{{1}}部分,我使用totalClicks
,那么下面的代码就不用了。如果我省略var numclicks = 1;
关键字,它就可以了。这是因为代码工作var
需要是一个全局变量,还是有其他原因?这是numclicks
应该始终使用的规则的例外,还是有另一种方法来编程。
第一次单击该按钮时,输出为var
。我不清楚为什么它不是1?遵循代码的逻辑,在将变量写入文档之前,该变量似乎设置为1。我知道如果我在函数语句之前添加NaN
,这个问题就会得到解决。但我不清楚为什么这样才能解决问题。
非常感谢你的帮助。
CODE
numclick = 0;
答案 0 :(得分:2)
第一次定义numclicks
时,它需要在任何函数之外,因此它变为全局函数。在函数内定义变量时使用var
不会使其成为全局变量。在函数内部对全局变量使用var将使其成为局部变量。
您有一个ID为numclicks
的元素,因此默认情况下window.numclicks
指向该元素。
答案 1 :(得分:0)
试试这个:
<html>
<head>
<title>Count number of clicks</title>
</head>
<body>
<form>
<input type="button" value="click here" onclick="totalClicks();">
</form>
Total clicks: <span id="numclicks"></span>
<script type="text/javascript">
function totalClicks(){
var numClicks = document.getElementById("numclicks").value;
if (numclicks > 0) {
numclicks++;
}
else {
numclicks = 1;
}
document.getElementById("numclicks").innerHTML = numclicks;
}
</script>
</body>
</html>
答案 2 :(得分:0)
当然它需要是一个全局变量。
这是因为一旦到达totalClicks()
函数的末尾,局部变量的范围就会消失。
我不知道是什么原因造成的,但将numclicks设置为0 OUTSIDE该功能应该有帮助。将window.numclicks设置为0并始终使用window.numclicks,这样您就可以随时查看哪个是全局变量。 (全球范围通常非常实用,即使它在许多语言中经常被不赞成)