Jedes Mal, wenn ich das ausführe, bekomme ich diesen Fehler:
Uncaught ReferenceError: bis ist nicht definiert (anonyme Funktion)
Ich kann nicht sehen, was falsch ist. Ich habe versucht, viel zu googeln, aber jede Seite, die ich finde, sagt, dass setInterval()
richtig ist.
Das Problem ist, dass Sie den Code als Zeichenfolge an setInterval
übergeben. Dies bedeutet, dass es im globalen Umfang ausgewertet wird. Die Variable until
existiert nicht im globalen Bereich, sondern nur in dem Bereich, in dem sie definiert ist.
Wenn Sie eine Funktion übergeben, bedeutet dies, dass die Variable until
verfügbar ist (sie ist "geschlossen"):
Die logische Erklärung wäre, dass die Variable until
keine globale Variable ist. Wenn es nicht global ist (oder in einer relevanten Funktionsverknüpfung erfasst wurde), ist es nicht noch vorhanden, wenn setInterval ausgelöst wird und versucht, die Zeichenfolge, die Sie als Funktionsaufruf übergeben haben, auszuwerten. Es ist auch keine gute Übung, eine Zeichenfolge an setInterval zu übergeben, Sie sollten eine tatsächliche JavaScript-Funktion übergeben.
Wie Sie Ihren Code ändern sollten, hängt davon ab, ob der Wert von bis bei jedem Aufruf der Intervallfunktion aktualisiert werden soll oder ob Sie ihn nur einmal erfassen möchten, bevor er überhaupt ausgeführt wird, und diesen Wert für alle verwenden nachfolgende Aufrufe des Timer-Intervalls. Ihr Code ist ein wenig mehrdeutig für welche Art Sie wollen, dass das funktioniert (es einmal in eine Variable einfängt, aber dann versucht, es jedes Mal zu übergeben). Wenn Sie nicht möchten, dass der Wert von bis aktualisiert wird, können Sie Folgendes tun:
%Vor% Dies wird den Bereich von until
in einer Funktionsschließung erfassen und für die Callback-Funktion für anonyme Intervalle verfügbar machen. Wenn du es in eine Kette steckst, wie du es vorher getan hast, würde das keinen solchen Abschluss schaffen.
Ich habe auch den Aufruf von updateTime(until)
mit der Deklaration von updateTime()
in Verbindung gebracht.
SetInterval hat einen globalen Gültigkeitsbereich, daher nehme ich an, dass bis es nicht im globalen Gültigkeitsbereich definiert wurde. Ändern Sie Ihren Code zu den folgenden zwei funktioniert. Ich glaube, das ist es, was du versuchst zu tun.
%Vor%oder
%Vor%Hinweis: Dies setzt voraus, dass bis jede Sekunde geändert wird; Ansonsten bin ich mir nicht sicher, warum du ein Intervall haben solltest.
Tags und Links javascript jquery