javascript全局变量 - 函数范围?

时间:2016-06-23 13:07:04

标签: javascript html global-variables local-variables

我尝试使用javascript创建一个简单的程序,它将计算在文本字段中输入的两个数字的总和和平均值。

<script>
var a=parseInt(document.getElementById("text1").value);
var b=parseInt(document.getElementById("text2").value);
function sum()
{
var result = document.getElementById("valueofsum");
var sum=a+b;
result.innerHTML = sum;
}

function average()
{
var result = document.getElementById("valueofavg");
var avg=(a+b)/2;
result.innerHTML = avg;

}

function reset()
{
 document.getElementById("text1").value = "";
 document.getElementById("text2").value = "";
 document.getElementById("valueofsum").innerHTML = "";
 document.getElementById("valueofavg").innerHTML = "";
}
</script>

从文本字段读取值的两个变量是全局声明的,并初始化为“a”和“b”。 总和和平均值以NaN(NotaNumber)而不是计算结果返回。

如果我使用/声明函数内部的变量作为局部变量,代码似乎工作正常,这让我想知道javascript中全局变量的范围?

3 个答案:

答案 0 :(得分:2)

当您加载页面时,您正在读取输入中的值(此时它们可能是空字符串)。

如果要在sumaverage函数运行时(即在用户输入内容后)获取值,则需要在时获取值这些功能运行

请参阅以下代码示例:

function sum() {
  var a=parseInt(document.getElementById("text1").value);
  var b=parseInt(document.getElementById("text2").value);
  var result = document.getElementById("valueofsum");
  var sum=a+b;
  result.innerHTML = sum;
}

答案 1 :(得分:1)

你没有提供任何HTML代码,所以我猜你已经把你的脚本放在你的页面的开头,然后HTML代码跟在它之后导致你的代码在创建DOM之前运行,因此没有&#34; text1& #34;和&#34; text2&#34;元素实际上存在于那一点。

当你把它们放在函数中时,你只需避免上述问题,因为我怀疑你在页面的末尾执行这些函数,或者在某处使用任何onClick事件。

如果情况并非如此,请提供有关页面结构的更多信息。

答案 2 :(得分:1)

您在全局范围内获取值,并且在执行这些行时,值为空。您需要在全局范围内获取字段引用以避免重复,但在副函数中获取值。

<script>
  var a = document.getElementById("text1");
  var b = document.getElementById("text2");
  function sum()
  {
  var result = document.getElementById("valueofsum");
  var sum = parseInt(a.value) + parseInt(b.value);
  result.innerHTML = sum;
  return sum;
  }

  function average()
  {
  var result = document.getElementById("valueofavg");
  var avg= sum()/2;
  result.innerHTML = avg;
  return avg;
  }

  function reset()
  {
   document.getElementById("text1").value = "";
   document.getElementById("text2").value = "";
   document.getElementById("valueofsum").innerHTML = "";
   document.getElementById("valueofavg").innerHTML = "";
  }
</script>