2010-08-26 9 views

Respuesta

72

No necesariamente se ejecutará de inmediato, ni establecerá explícitamente el retraso en 0. La razón es que setTimeout elimina la función de la cola de ejecución y solo se invocará después de que JavaScript haya finalizado con la cola de ejecución actual.

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

para más detalles ver http://javascriptweblog.wordpress.com/2010/06/28/understanding-javascript-timers/

20

Hay un retraso mínimo que usa setTimeout (4ms según HTML5, Firefox 3.6 usa 10ms). Hay una discusión al respecto en el Mozilla Developer Center documentation page.

+1

¡De hecho, vea otras respuestas para una explicación correcta! – Qwerty

1

Le falta el parámetro milisegundo ...

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

El 0 establece el retraso a 0, pero lo que realmente hace es dejar que su función "saltarse la cola" de la lista de ejecución del navegador. El navegador tiene muchas cosas que hacer, como representar objetos en la página, y al invocar esto, su función se ejecutará tan pronto como el navegador tenga algunos ciclos.

+8

Esta es la pregunta ... el título pregunta qué sucede cuando no hay retraso previsto :) –

+0

Oh, está bien. Pensé que era un error de sintaxis ya que varios documentos indican que es un parámetro requerido. Luego lo probé rápidamente y funcionó. – Gary

+0

El segundo parámetro es (¿ya no es?) Obligatorio https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout –

Cuestiones relacionadas