SetTimeout è senza ritardi uguale all’effettuazione immediata della funzione?

Sto guardando un codice esistente in un’applicazione web. L’ho visto:

window.setTimeout(function () { ... })

È lo stesso di quando si esegue subito il contenuto della funzione?

Non verrà necessariamente eseguito immediatamente, né verrà impostato esplicitamente il ritardo su 0. Il motivo è che setTimeout rimuove la funzione dalla coda di esecuzione e verrà invocata solo dopo che JavaScript ha terminato con la coda di esecuzione corrente.

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

per maggiori dettagli vedi http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/

C’è un ritardo minimo che usa setTimeout (4ms come in HTML5, Firefox 3.6 usa 10ms). C’è una discussione a riguardo nella pagina di documentazione del Centro per sviluppatori Mozilla.

Manca il parametro millisecondo …

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

Lo 0 imposta il ritardo su 0 ma ciò che effettivamente fa è lasciare che la funzione “salti la coda” dell’elenco di esecuzione del browser. Il browser ha un sacco di cose da fare come il rendering degli oggetti sulla pagina, e chiamando questo, la tua funzione verrà eseguita non appena il browser ha alcuni cicli.