【发布时间】:2012-01-31 15:41:28
【问题描述】:
我正在尝试使用 JavaScript 构建一个计时器。这是我的功能:
var t;
function time(num){
var buf = num;
document.getElementById("test").innerHTML=buf;
buf++;
alert(buf + " " + num); //For troubleshooting
t=setTimeout("time(buf)",1000);
}
如果我运行 time(0),ID="test" 的部分不会发生任何事情。每次调用函数时,num 始终等于 0,buf 始终等于 1(来自警报函数)。
我对 Java 和 C 很熟悉,而且我知道这适用于这些语言。我知道 JavaScript 也是一种按值传递的语言,那么为什么这个计时器不起作用呢?
另外,为什么我尝试(并将所有buf更改为num)时没有任何反应
t=setTimeout("time(num)",1000);
我知道还有其他方法可以创建计时器,但我想知道为什么这种方法不起作用。谢谢。
【问题讨论】:
-
你可能认为这是递归,但实际上不是。
time()被调用,然后它调用setTimeout()并传递一个稍后将执行的字符串。然后,time()返回,一段时间后,定时器代码再次调用time()。这在技术上不是递归。对time()的第一次调用在第二次调用之前已经完成。您只是将第二次通话安排在未来一段时间。
标签: javascript recursion timer settimeout pass-by-value