2011-07-22 77 views
0

如何等待執行下一個函數前1秒?睡眠在JavaScript(或同等學歷)

例如如php具有睡眠()

+0

可能重複的[在JavaScript中是否有睡眠函數?](http://stackoverflow.com/questions/1141302/is-there-a-sleep-function-in-javascript) – lonesomeday

+3

確切的重複[什麼是?睡眠()(http://stackoverflow.com/questions/951021/what-is-the-javascript-version-of-sleep) –

回答

5

setTimeout(f, 1000);

設置在超時後1000毫秒

window.setTimeout[docs]

window.setTimeout[spec]

window.setTimeout[dark side]

運行的功能在評論中提到的10所

爲。 JavaScript是單線程的,並且該線程與瀏覽器UI線程共享。

所以,通過調用像sleep阻擋功能。你會阻止只有線程。這也意味着客戶端在阻塞時不能與頁面交互。

Event Driven Programming[wiki]本文的詳細信息

+1

的JavaScript版本要擴大:你不想要的東西,如「睡眠「因爲你不希望瀏覽器在你等待的時候停止運行。由於Javascript是事件驅動的,因此您需要將控制權交還給瀏覽器,並告訴它在必要的時間後將其喚醒。 –

+0

哈哈黑暗的一面=))TX! – wait

0

您可以使用setTimeout的方法,這樣做 http://www.w3schools.com/js/js_timing.asp

的setTimeout( 「ALERTMSG()」,1000);

功能ALERTMSG(){ 警報( 「你好」); }

+0

你是什麼意思? –

+0

[w3fools](http://w3fools.com/)詳細解釋了這個例子 – Raynos

+2

這個例子的細節也沒有幫助:將一個字符串作爲第一個參數傳遞給'setTimeout'被認爲是不好的做法,因爲它的計算結果爲' setTimeout(function(){eval(「myFunction()」);},3000)'。 'timeMsg'將超時句柄指定給t,但從不返回它,因此無法清除超時。它也與'alertMsg'緊密耦合,因爲它使用魔術字符串作爲執行回調。 –

1

即使是setTimeout的所有主流瀏覽器的支持,我喜歡,因爲通常一個不僅僅是調用超時功能做更多的JS使用JavaScript庫。在YUI中:

YAHOO.lang.later(1000, this, function() { 
... 
}); 

更多信息here

+2

爲什麼更喜歡爲此使用一個庫。爲此僅包含一個圖書館似乎很荒謬。 – Raynos

+0

@Ryanos真的!?如果他正在使用setTimeout,他可能會做更多的js而不是調用函數來休眠1秒。這是一個很好的習慣,加上YUI和其他人抽象出一些複雜性,如間隔調用。不要這麼觸發快樂,去喝咖啡 –

+0

這是一個不同的問題。推薦瀏覽器合規性庫(總是很好)和推薦一個庫來解決一個非常具體的問題是有區別的。 – Raynos