Ich habe diesen Zähler, den ich gemacht habe, aber ich möchte, dass er für immer läuft. Es ist wirklich einfach. Was mache ich hier falsch?
function timer() {
console.log("timer!")
}
window.setInterval(timer(), 1000)
javascript
callback
setinterval
computer_smile
quelle
quelle
timer()
das Funktionsobjekt aufzurufen, das sich aus der Auswertungtimer
ergibt, und dann das Ergebnis (undefined
) an zu übergebensetTimeout
. Rufen Sie es also nicht auf.setInterval(timer, 1000)
Antworten:
Sie haben einen Funktionsaufruf anstelle einer Funktionsreferenz als ersten Parameter des setInterval verwendet. Mach es so:
function timer() { console.log("timer!"); } window.setInterval(timer, 1000);
Oder kürzer (aber wenn die Funktion größer wird, auch weniger lesbar):
window.setInterval( function() { console.log("timer!"); }, 1000)
quelle
setInterval
undsetTimeout
muss mit Rückrufen verwendet werden, wie:setInterval(timer, 1000);
oder unbenannte Funktionen:
setInterval( function() { console.log("timer!"); }, 1000 );
Warum Ihr Code nicht funktioniert - wenn Sie eine Funktion als Argument an eine andere Funktion mit Klammern übergeben, z. B. übergeben
doSomething ( someFunc() )
Sie das Ergebnis der Funktion.Wenn die Funktion als Objekt übergeben wird, übergeben
doSomething ( someFunc )
Sie z. B. einen Rückruf. Dieser WegsomeFunc
wird als Referenz übergeben und irgendwo in der aufrufenden Funktion ausgeführt. Dies entspricht den Zeigern auf Funktionen in anderen Sprachen.Ein häufiger Fehler ist die Verwendung dieser beiden Funktionen, wie in w3schools gezeigt . Dies macht einen impliziten Aufruf an
eval
.quelle