setInterval funktioniert nicht?

7
%Vor%

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.

    
Mobilpadde 10.08.2011, 15:41
quelle

5 Antworten

15

Verschlüsse:

%Vor%     
Gabriel Ross 10.08.2011, 15:43
quelle
5

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"):

%Vor%     
lonesomeday 10.08.2011 15:44
quelle
0

Sie verwenden eine Form von Eval. Verwenden Sie:

%Vor%     
William 10.08.2011 15:43
quelle
0

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.

    
jfriend00 10.08.2011 15:45
quelle
0

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.

    
scottheckel 10.08.2011 15:49
quelle

Tags und Links