首頁 >web前端 >js教程 >為什麼我的'setTimeout”函數立即執行而不是在預定時間執行?

為什麼我的'setTimeout”函數立即執行而不是在預定時間執行?

Susan Sarandon
Susan Sarandon原創
2024-11-12 13:40:01773瀏覽

Why Is My `setTimeout` Function Executing Immediately Instead of at a Scheduled Time?

為什麼我的 setTimeout 調度的函數沒有立即執行?

您的程式碼旨在使用 setTimeout 函數呼叫 doRequest 來測試代理伺服器間隔 10 秒。奇怪的是,這些函數是立即執行的,而不是按照預期的時間表執行。

理解問題

問題在於如何將 doRequest 函數傳遞給 setTimeout。當您指定一個函數為第一個參數時,如 setTimeout(doRequest(url, proxys[proxy]), proxytimeout) 中,該函數將會立即被呼叫。

要解決這個問題,您有以下三個選項:

  1. 將參數作為單獨的參數傳遞:

    setTimeout(doRequest, proxytimeout, url, proxys[proxy]);
  2. 使用字串表達式:

    setTimeout('doRequest(' + url + ',' + proxys[proxy] + ')', proxytimeout);
  3. 在閉包中定義匿名函數:

    (function(u, p, t) {
       setTimeout(function() { doRequest(u, p); }, t);
    })(url, proxys[proxy], proxytimeout);
    在閉包中定義匿名函數:

第一個選項是首選,因為它更清晰、更明確。由於其「hacky」性質,第二個選項不太理想,而第三個選項可能很難理解,但可以防止循環內的值發生變化。

以上是為什麼我的'setTimeout”函數立即執行而不是在預定時間執行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn