簡體   English   中英

具有定時事件(setTimeout)的JavaScript遞歸

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM