setInterval
und setTimeout
müssen mit Rückrufe 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. doSomething (someFunc())
Sie übergeben das Ergebnis der Funktion.
Wenn die Funktion als Objekt übergeben wird, z. doSomething (someFunc)
Sie übergeben einen Rückruf. Auf diese Weise wird someFunc
als Referenz übergeben und irgendwo in der aufrufenden Funktion ausgeführt. Dies entspricht den Hinweisen auf Funktionen in anderen Sprachen.
Ein häufiger Fehler ist die Verwendung dieser beiden Funktionen wie unter w3schools gezeigt. Dies führt zu einem impliziten Aufruf an eval
.
Das Problem ist 'timer()' ruft das Funktionsobjekt auf, das aus der Auswertung von 'timer' resultiert und gibt dann das Ergebnis (' undefined') an 'setTimeout'. Also, rufe es nicht auf. Übergeben Sie stattdessen einfach das Funktionsobjekt: 'setInterval (timer, 1000)' –