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