Ricerca…


Sintassi

  • timeoutID = setTimeout (function () {}, millisecondi)
  • intervalID = setInterval (function () {}, millisecondi)
  • timeoutID = setTimeout (function () {}, millisecondi, parametro, parametro, ...)
  • intervalID = setInterval (function () {}, millisecondi, parametro, parametro, ...)
  • clearTimeout (timeoutID)
  • clearInterval (intervalID)

Osservazioni

Se il ritardo non viene specificato, il valore predefinito è 0 millisecondi. Tuttavia, il ritardo effettivo sarà più lungo di quello ; ad esempio, la specifica HTML5 specifica un ritardo minimo di 4 millisecondi.

Anche quando setTimeout viene chiamato con un ritardo pari a zero, la funzione chiamata da setTimeout verrà eseguita in modo asincrono.

Notare che molte operazioni come la manipolazione DOM non sono necessariamente completate anche se è stata eseguita l'operazione e passate alla successiva frase di codice, quindi non si deve presumere che funzioneranno in modo sincrono.

L'utilizzo di setTimeout(someFunc, 0) accoda l'esecuzione della funzione someFunc alla fine dello stack di chiamate del motore JavaScript corrente, quindi la funzione verrà chiamata al termine di tali operazioni.

È possibile passare una stringa contenente codice JavaScript ( setTimeout("some..code", 1000) ) al posto della funzione ( setTimeout(function(){some..code}, 1000) ). Se il codice è inserito in una stringa, verrà analizzato in seguito utilizzando eval() . I timeout in stile stringa non sono consigliati per motivi di prestazioni, chiarezza e talvolta di sicurezza, ma è possibile che venga visualizzato codice meno recente che utilizza questo stile. Le funzionalità di passaggio sono state supportate da Netscape Navigator 4.0 e Internet Explorer 5.0.

intervalli

function waitFunc(){
    console.log("This will be logged every 5 seconds");
}

window.setInterval(waitFunc,5000);

Rimozione degli intervalli

window.setInterval() restituisce un IntervalID , che può essere utilizzato per interrompere tale intervallo dal continuare a correre. Per fare ciò, memorizzare il valore di ritorno di window.setInterval() in una variabile e chiamare clearInterval() con tale variabile come unico argomento:

function waitFunc(){
    console.log("This will be logged every 5 seconds");
}    

var interval = window.setInterval(waitFunc,5000);

window.setTimeout(function(){
    clearInterval(interval);
},32000);

Questo registro This will be logged every 5 seconds ogni 5 secondi, ma verrà interrotto dopo 32 secondi. Quindi registrerà il messaggio 6 volte.

Rimozione dei timeout

window.setTimout() restituisce un TimeoutID , che può essere utilizzato per interrompere il timeout in esecuzione. Per fare ciò, memorizzare il valore di ritorno di window.setTimeout() in una variabile e chiamare clearTimeout() con quella variabile come unico argomento:

function waitFunc(){
    console.log("This will not be logged after 5 seconds");
}
function stopFunc(){
    clearTimeout(timeout);
}

var timeout = window.setTimeout(waitFunc,5000);
window.setTimeout(stopFunc,3000);

Questo non registrerà il messaggio perché il timer si ferma dopo 3 secondi.

SetTimeout ricorsivo

Per ripetere una funzione indefinitamente, setTimeout può essere chiamato in modo ricorsivo:

function repeatingFunc() {
    console.log("It's been 5 seconds. Execute the function again.");
    setTimeout(repeatingFunc, 5000);
}

setTimeout(repeatingFunc, 5000);

A differenza di setInterval , ciò garantisce che la funzione venga eseguita anche se il tempo di esecuzione della funzione è superiore al ritardo specificato. Tuttavia, non garantisce un intervallo regolare tra le esecuzioni delle funzioni. Questo comportamento varia anche perché un'eccezione prima della chiamata ricorsiva a setTimeout impedirà il ripetersi, mentre setInterval si ripeterà indefinitamente a prescindere dalle eccezioni.

setTimeout, ordine delle operazioni, clearTimeout

setTimeout

  • Esegue una funzione, dopo aver atteso un numero specificato di millisecondi.
  • utilizzato per ritardare l'esecuzione di una funzione.

Sintassi: setTimeout(function, milliseconds) o window.setTimeout(function, milliseconds)

Esempio: questo esempio restituisce "ciao" alla console dopo 1 secondo. Il secondo parametro è in millisecondi, quindi 1000 = 1 sec, 250 = 0,25 sec, ecc.

setTimeout(function() {
    console.log('hello');
}, 1000);

Problemi con setTimeout

se stai utilizzando il metodo setTimeout in un ciclo for :

for (i = 0; i < 3; ++i) {
  setTimeout(function(){
    console.log(i);
  }, 500);
}

Questo produrrà il valore 3 three volte, il che non è corretto.

Soluzione alternativa di questo problema:

for (i = 0; i < 3; ++i) {
  setTimeout(function(j){
    console.log(i);
  }(i), 1000);
}

Produrrà il valore 0 , 1 , 2 . Qui, stiamo passando l' i nella funzione come parametro ( j ).

Ordine delle operazioni

Inoltre, a causa del fatto che Javascript è a thread singolo e utilizza un ciclo di eventi globale, setTimeout può essere utilizzato per aggiungere un elemento alla fine della coda di esecuzione chiamando setTimeout con zero delay. Per esempio:

setTimeout(function() {
    console.log('world');
}, 0);

console.log('hello');

Produrrà effettivamente:

hello
world

Inoltre, zero millisecondi qui non significa che la funzione all'interno di setTimeout verrà eseguita immediatamente. Ci vorrà un po 'più di quello a seconda degli elementi da eseguire rimanenti nella coda di esecuzione. Questo è semplicemente spinto alla fine della coda.

Annullamento di un timeout

clearTimeout (): interrompe l'esecuzione della funzione specificata in setTimeout()

Sintassi: clearTimeout (timeoutVariable) o window.clearTimeout (timeoutVariable)

Esempio :

var timeout = setTimeout(function() {
    console.log('hello');
}, 1000);

clearTimeout(timeout); // The timeout will no longer be executed

intervalli

Standard

Non è necessario creare la variabile, ma è una buona pratica in quanto è possibile utilizzare tale variabile con clearInterval per interrompere l'intervallo attualmente in esecuzione.

var int = setInterval("doSomething()", 5000 ); /* 5 seconds */
var int = setInterval(doSomething, 5000 ); /* same thing, no quotes, no parens */

Se è necessario passare parametri alla funzione doSomething, è possibile passarli come parametri aggiuntivi oltre i primi due per impostareIntervallo.

Senza sovrapposizioni

setInterval, come sopra, verrà eseguito ogni 5 secondi (o qualsiasi cosa tu lo imposti) indipendentemente da cosa. Anche se la funzione doSomething richiede più di 5 secondi per l'esecuzione. Questo può creare problemi. Se vuoi solo assicurarti che ci sia una pausa tra le fasi di doSomething, puoi farlo:

(function(){

   doSomething();

   setTimeout(arguments.callee, 5000);

})()


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow