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)
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)
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)
setInterval
und setTimeout
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 Weg someFunc
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
.
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)