2014-06-20 23 views
5

Mi sono divertito con setTimeout e setInterval, e non riesco a ottenere il codice da eseguire nel modo in cui mi piacerebbe farlo. Il mio obiettivo è creare un setInterval, che chiama una volta ogni tre secondi, e lo cancella dopo dieci secondi. Tuttavia, quando eseguo il codice in firebug, l'unica cosa che ottengo è un numero, che presumo sia l'id di setInterval perché ogni volta che eseguo il codice, il numero aumenta.setTimeout sembra essere troppo veloce

var intID = setInterval(function() { 
    console.log("I've been called");},3000); 


setTimeout(clearInterval(intID), 10000); 

risposta

14

Questa affermazione:

setTimeout(clearInterval(intID), 10000); 

significa "chiamare la funzione 'clearInterval' passando il valore della variabile 'intID', e quindi passare il valore di ritorno di questo e il numero 10000 alla funzione 'setTimeout'."

In altre parole, sei chiama la funzione "clearInterval" e poi passando il valore restituito al setTimeout().

Passare invece setTimeout() una funzione:

setTimeout(function() { clearInterval(intID); }, 10000); 
2

Sei non impostare l'intervallo in questo modo:

setInterval(console.log("I've been called"), 3000); 

Se così fosse, console.log sarebbe stato chiamato immediatamente - anche prima disetInterval, poiché è un argomento a setInterval e gli argomenti devono essere valutati prima di chiamare le funzioni su quello li usa.

Quindi perché stai impostando il timeout come questo?

setTimeout(clearInterval(intID), 10000); 

Questo causa lo stesso tipo di problema come sopra.

Basta fare la stessa cosa che hai fatto quando si imposta l'intervallo invece:

setTimeout(function() { clearInterval(intID); }, 10000); 
Problemi correlati