[英]JavaScript Recursion with Timing Event (setTimeout)
我正在嘗試使用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(來自alert函數)。
我對Java和C感到很滿意,並且我知道這會在那些語言中起作用。 我知道JavaScript也是一種傳遞值的語言,那么為什么此計時器不起作用?
另外,為什么當我嘗試時什么都沒發生(並將所有buf更改為num )
t=setTimeout("time(num)",1000);
我知道還有其他創建計時器的方法,但是我想知道為什么此方法不起作用。 謝謝。
避免將字符串傳遞給setTimeout
。 當您執行此操作時,該字符串或多或少被作為eval
執行,由於許多原因,這是邪惡的。 有關更多信息,請參見此問題 。
相反,請考慮將匿名函數傳遞給setTimeout
。 這將使您解決問題變得微不足道:
t = setTimeout(function() { time(buf); }, 1000);
將字符串傳遞給setTimeout
,將在時間到來時對其進行評估。 在這種情況下,當時間到了時,就不再有buf
變量,並且代碼將引發錯誤。
您應該自己替換值。
t = setTimeout("time(" + buf + ")",1000);
或者,更好的是,傳遞一個函數而不是字符串
t = setTimeout(function() {
time(buf);
}, 1000);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.