setTimeout()
只是安排將來運行的東西,其餘的Javascript繼續運行。它不會阻止進一步的Javascript執行。這通常被稱爲「異步」操作。它在後臺運行,並在將來完成其工作時的某個時間調用回調。它也被稱爲「非阻塞」,因爲它不會阻塞你的其他Javascript執行。你想不運行,直到setTimeout()
大火,必須把setTimeout()
回調內部或從那裏叫
什麼。
// define function
function timer(){
myVar = setTimeout(function() {
console.log("SLOW");
}, 10000);
}
// schedule first timer
setTimeout(function() {
$("#nytLevel").hide();
// now start second timer
timer();
}, 3000);
值得一提的是,jQuery有一個.delay()
方法與動畫等功能放入隊列中工作,而且有時可以簡化你的代碼。在上述情況下,你可以這樣做:
$("#nytLevel").delay(3000).hide().delay(10000).queue(function(next) {
console.log("SLOW");
next(); // keep the queue moving in case there's something else in the queue
});
請注意:.delay(xxx)
只與自己使用隊列(如動畫),或你把自己使用.queue()
隊列方法jQuery方法的工作(如我已經在上面顯示)。
你是如何執行你的代碼?訂單是什麼?提供的代碼根本不能解釋它...... – Rayon
這聽起來很像[XY問題](http://xyproblem.info)。爲什麼不能在第一次超時時間內使用timer()調用? – JJJ
@pushalu setTimeout是一個異步函數 –