2010-04-27 12 views
5

I HTML5specifications stati che setTimeout può essere eseguito senza l'ulteriore argomento "timeout" che dovrebbe dire dopo quanti millisecondi sarà la funzione di "gestore" essere programmato.setTimeout (divertimento) con un singolo argomento? (Timeout non specificato)

handle = window . setTimeout(handler [, timeout [, arguments ] ]) 
    Schedules a timeout to run handler after timeout milliseconds. Any arguments are passed straight through to the handler. 

Tuttavia, non sono riuscito a trovare da nessuna parte che spieghi cosa succede quando non è impostato un periodo di "timeout".

Un esempio di utilizzo è il animation implementation nella libreria Raphael.

animationElements[length] && win.setTimeout(animation); 
+0

Tutti i principali browser attuali sono in grado di accettare un singolo argomento, quindi per evitare qualsiasi confusione vale la pena sottolineare che un browser non deve essere compatibile con HTML5 per supportare questo. –

+2

Questo è uno splendido modo di effettuare chiamate di procedure differite in JS - "fai X dopo/non-ora-ora". Se sei all'interno di un gestore di eventi, potrebbe essere un brutto momento chiamare qualche funzione a causa di problemi di stato/rientro. Si noti che non è possibile garantire il tempo di esecuzione effettivo, ma è "presto". – JBRWilkinson

+0

@Andy Mozilla MDC indica il millisecondo come parametro obbligatorio. –

risposta

13

Vedi http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#get-the-timeout

  1. Sia timeout essere il secondo argomento metodo, o zero se l'argomento è stato omesso.
+5

Mi picchiate :-) +1. Stavo per aggiungere alla mia risposta (ma potrebbe anche aggiungerlo qui) che solo perché l'argomento di timeout è 0 non significa necessariamente che verrà eseguito all'istante, ma verrà ancora accodato per essere eseguito quando il thread diventa inattivo, ad es. dopo che tutta l'esecuzione del codice corrente è finita. –

+0

Grr ... non so come mi sono perso. Scusa e grazie. –

+1

FYI, il documento di riferimento sopra è stato modificato in modo che ora legga semplicemente: "Lascia che il timeout sia il secondo argomento del metodo." Tuttavia, la documentazione di Mozilla documenta questo comportamento qui: https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout – minorgod

1

L'ho provato su tutti i browser incluso IE6, tutto funziona bene. Quindi, sentitevi liberi di usarlo ~~

Problemi correlati