函数内的setInterval会产生错误:未定义变量

时间:2012-11-10 21:30:07

标签: javascript

我不明白出了什么问题。我有三个代码:
第一:

<script language="JavaScript" type="text/javascript">
   var count = 0;
   alert(count);
   var timer = setInterval("count = count + 1; alert(count);",10000);
</script>

第二:

<script language="JavaScript" type="text/javascript">
  function countdown()
  {
   var count = 0;
   alert(count);
   var timer = setInterval("count = count + 1; alert(count);",10000);
  }
  countdown();
</script>



第三:

<script language="JavaScript" type="text/javascript">
   var count = 0;
  function countdown()
  {
   alert(count);
   var timer = setInterval("count = count + 1; alert(count);",10000);
  }
  countdown();
</script>



第一个代码工作正常,第二个代码在“setInterval”行中产生错误:“count not not defined”,第三个代码再次正常工作。对于第二个代码中的setInterval函数,“count”变量的范围应该是全局的。为什么不呢?我正在使用Mozilla Firefox。 感谢。

1 个答案:

答案 0 :(得分:8)

由于很多原因,您刚刚遇到其中一个原因,从来没有将字符串传递给setTimeoutsetInterval。永远。我是认真的。没有充分的理由。

改为传递功能。传递函数对象的能力是一个JS最佳特性。

var count = 0;
alert(count);

var timer = setInterval(function(){
  count = count + 1;
  alert(count);
}, 10000);

您遇到的问题是以这种方式将代码作为字符串不会考虑范围。它将在全局范围内执行,这是您的变量在第2和第3个片段中不存在的位置。并且第一个片段有效,因为count确实是一个全局变量。

其他问题源于这个事实,这基本上是eval,它带来了自己的头痛,最好完全避免。毕竟Eval is Evil