簡體   English   中英

setTimeout似乎正在立即執行

[英]setTimeout seems to be executing instantly

我正在嘗試教自己一些JavaScript,並同時嘗試遞歸。 我在下面編寫的代碼預計將“吸氣”到控制台打印10次,兩次打印之間有5秒的延遲。 但是,當我在Chrome的開發工具中查看控制台時,刷新頁面后,所有條目似乎都立即被打印出來。 誰能幫助我找到實施中的錯誤? 謝謝!

function breathe(type, counter, limit, duration) {
  if(counter <= limit) {
    setTimeout(console.log(type), duration);
    counter++;

    return breathe(type, counter, limit, duration);
  }

  console.log("Finished!");
}

var breathing = breathe("inhale", 1, 10, 5000);

setTimeout方法需要一個函數引用。 這應該工作。

function breathe(type, counter, limit, duration) {
  if(counter <= limit) {
    setTimeout(function(){console.log(type)}, duration);
    counter++;

    return breathe(type, counter, limit, duration);
  }

  console.log("Finished!");
}

var breathing = breathe("inhale", 1, 10, 5000);

這是因為您正在立即執行console語句(因為您正在通過()執行console.log ),而不是將函數引用傳遞給setTimeout

setTimeout(console.log(type), duration);

嘗試以下方法:

setTimeout(function() {
    console.log(type)
}, duration);  

您可以使用的另一種形式(只是為了敲擊傳遞函數引用的概念)是:

function callMeAfterDelay() {
    console.log(type);
}

setTimeout(callMeAfterDelay, duration);
setTimeout(console.log(type), duration);

這將立即執行console.log(type) ,然后將結果傳遞到setTimeout中。 console.log的結果是undefined ,因此超時結束后不會發生任何事情。

相反,您想這樣做:

setTimeout(function () {
    console.log(type);
}, duration);

我認為這是您想要的:

function breathe(type, counter, limit, duration) {
  if(counter <= limit) {
    setTimeout(function(){
        console.log(type);
        counter++;

        return breathe(type, counter, limit, duration);
    }, duration);
  }

  console.log("Finished!");
}

var breathing = breathe("inhale", 1, 10, 5000);

 var counter = 0; var duration = 2000 var text = "Inhale"; var limit = 10; function print(counter, duration, text, limit) { setTimeout(function(){ console.log(text, counter) counter++; if (counter < limit) { print(counter, duration, text, limit); } },duration) }; print(counter, duration, text, limit); 

嘗試這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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