2010-08-26 14 views

cevap

72

Her ikisi de hemen çalıştırılmayacaktır, ne de gecikmeyi açıkça 0'a ayarlamayacaktır. Bunun nedeni, setTimeout'un işlevi yürütme sırasından kaldırmasıdır ve yalnızca JavaScript geçerli yürütme kuyruğuyla bittikten sonra çağrılır.

console.log(1); 
setTimeout(function() {console.log(2)}); 
console.log(3); 
console.log(4); 
console.log(5); 
//console logs 1,3,4,5,2 

daha fazla detay http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/

20

setTimeout'un kullandığı minimum bir gecikme vardır (HTML5'e göre 4ms, Firefox 3.6 10ms kullanır). Mozilla Geliştirici Merkezi documentation page'da bir tartışma var.

+1

Aslında, doğru bir açıklama için diğer cevaplara bakın! – Qwerty

1

Sen milisaniye parametresi yok ...

setTimeout(function() { /*something*/ }, 0); 

0 0 gecikmeyi ayarlar ama ne Ve olduğu için fonksiyon tarayıcı yürütme listesinin "sıra atlamak" bırakmaktır. Tarayıcıda, sayfada nesne oluşturma gibi bir çok şey vardır ve bunu çağırarak, tarayıcınızda birkaç döngü olduğu sürece işleviniz çalışır.

+8

Bu soru ... başlıkta verilen gecikme olmadığı zaman ne olacağını soruyor :) –

+0

Tamam tamam. Çeşitli belgeler, gerekli bir parametre olduğunu belirttiği için bir sözdizimi hatası olduğunu düşündüm. Sonra çabucak denedim ve işe yaradı. – Gary

+0

İkinci parametre (artık değil?) Gerekli https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout –

İlgili konular