2017-02-19 5 views
0
var fireCount =0; 
var start = new Date 
var timer=setInterval(function() { 
    if(new Date - start > 1000){ 
     clearInterval(timer) 
     console.log('Fired ',fireCount) 
    } 
    fireCount++; 
},0) 

Ergebnis: Fired 770Wie wird die Timervariable ausgeführt und in der Konsole abgefragt?

Was ich erwartet hatte: Blank oder keine Ausgabe

versucht, Rückrufe zu verstehen und dieses Beispiel auf dem Weg zu sehen ... kann mir jemand erklären, wenn Timer aufgerufen wird und wie wird 'Fired' auf der Konsole protokolliert?

ist Timer ein IFFE (sofort aufgerufene Funktion Ausdruck) hier?

bin ich hier etwas fehlt? Wie wird setInterval ausgeführt?

Was ist der Unterschied zwischen den beiden folgenden Funktionsvariablen?

var timer=setInterval(function() { 
    if(new Date - start > 1000){ 
     clearInterval(timer) 
     console.log('Fired ',fireCount) 
    } 
    fireCount++; 
},0) 


var x=function() { 
    console.log('x') 
} 

Wie wird der Timer gedruckt, während x nicht?

gut, experimentierte ich ein wenig mehr, und fand,

var x=setInterval(function() { 
    console.log('x') 
}) 

drucken x auf unbestimmte Zeit zu trösten, wie erwartet ....

so ist es, weil der Rückruf kein Code sehen wartete vor die Ereigniswarteschlange und führte daher den Rückruf aus?

Antwort

0

setInterval ist die Funktion, die bekommt function und number (stellvertretend ms) diese Funktion wird dann evry n ms ausgeführt.

ermöglicht der Rückgabewert der Funktion setInterval Aufheben diesen ‚loop‘ -Funktion clearInterval

+0

sicher bekomme ich das, aber wann heißt es? Ist die Funktionsdefinition nicht nur der Timer-Variable zugewiesen? wir haben timer "as of yet" noch nicht aufgerufen, aber meine Konsole wird mit "Fired 770" geloggt ich möchte wissen, wann es aufgerufen wird? – coolstoner

+0

es heißt Evry Zeit nach Intervall ist nach Timeout festgelegt Sie –

0

wenn die Intervall-Parameter von setInterval Funktion weniger als 10 verwendet wird, werden standardmäßig 10 ms eingestellt werden.

In Ihrem Fall jeweils 10ms Ihre Funktion ist exectuted, und nur das 770. Mal Ihre Bedingung wahr ist, so dass Sie die Log-in-Konsole sehen können, der Timer mit clearInterval getötet wird, so wird die Funktion aufrufen, werden nicht mehr

0

von dem w3schools https://www.w3schools.com/jsref/met_win_setinterval.asp

Die setInterval() Methode ruft eine Funktion oder wertet einen Ausdruck in bestimmten Abständen (in Millisekunden).


Vielleicht ist es klar am Anfang in dieser Form zu sehen: jede Millisekunde, bis die unten

var timer = setInterval(functToEvalueate(){..}, interval) 

Weil Sie 0 als Intervall vergangen, sind Sie Timer das erste Argument auswertet Ausdruck ist wahr:

new Date - start > 1000 
+0

haben meine Frage aktualisiert ... können Sie es bitte überprüfen? Warum wird es eingeloggt? Wir haben Timer nicht explizit aufgerufen, um die 'setInterval'-Funktion an erster Stelle aufzurufen? – coolstoner

+0

Sie verwechseln die Zuweisung mit der Bewertung. Dies ist eine einfache und einzige Zuweisung, wo timer speichern die Funktion und Aufruf timer() Sie bewerten den Code 'var timer = Funktion hinzufügen (x, y) {...}' Oder Sie zuweisen, um den Timer ausgeführt, das ist dein Fall 'var timer = add (1,2) // <- Kannst du sehen, dass ich die Funktion ausführe?' – mpalma

Verwandte Themen