我不明白出了什么问题。我有三个代码:
第一:
<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。
感谢。
答案 0 :(得分:8)
由于很多原因,您刚刚遇到其中一个原因,从来没有曾将字符串传递给setTimeout
或setInterval
。永远。我是认真的。没有充分的理由。
改为传递功能。传递函数对象的能力是一个JS最佳特性。
var count = 0;
alert(count);
var timer = setInterval(function(){
count = count + 1;
alert(count);
}, 10000);
您遇到的问题是以这种方式将代码作为字符串不会考虑范围。它将在全局范围内执行,这是您的变量在第2和第3个片段中不存在的位置。并且第一个片段有效,因为count
确实是一个全局变量。
其他问题源于这个事实,这基本上是eval
,它带来了自己的头痛,最好完全避免。毕竟Eval is Evil。