Frage

Zwei Fragen:

  1. Wie der Wert von setInterval und setTimeout (diejenigen verwendet zu löschen, die Zeitgeber) berechnet?

  2. zurückgegeben
  3. Ist es möglich, dass sowohl die Funktionen den gleichen Wert während der Laufzeit zurück? Zum Beispiel:

    var a = setInterval(fn1, 1000);
    var b = setTimeout(fn2, 1000);

Ist es möglich, für a und b den gleichen Wert zu haben?

Die erste ist eher ein for-my-Wissen Frage, aber der zweite ist wichtiger.

War es hilfreich?

Lösung

Gibt einen Wert, der verwendet werden kann, um den Timer abzubrechen es wäre. So unwahrscheinlich erscheinen, dass sie den gleichen Wert zurück (es sei denn, sie Wiederverwendung Werte sind und einer der Zeitgeber bereits abgesagt)

Mozilla heißt es DOM Level 0, aber nicht Teil der Spezifikation. (schauen am unteren Rand der Seite)

Ich habe eine noch bessere Referenz bekam:

Nabble sagt:

  

SetTimeout und setInterval sind aus   die ursprüngliche Javascript-Spezifikation,   Pre-ECMA. Diese Schrift ist nicht   offiziell überall standardisiert, aber   es wird von allen Webbrowsern unterstützt   und die meisten Implementierungen der   JavaScript-Sprache. (Einschließlich   Actionscript).

     

Die vorge ECMA-Spezifikationen sind oft bekannt als   der "DOM-0" APIs. Da sie   nie zuvor standardisiert, es   HTML5 macht Sinn für endlich spec   der nicht-auslaufend APIs in einem Versuch,   eine konsistente Umgebung zu schaffen,   in allen Browsern. Besonders wenn   die jüngsten Ereignisse haben bewiesen, dass es   Unternehmen, die implementieren möchten   der Brief der Norm, aber nicht   der Geist.

Lesen Sie die Original-spec rel="noreferrer"> oder von Sun (die ein frühes Endorser von JavaScript war).

Andere Tipps

Getestet dies unter Opera 9, Safari 3, Firefox 3 und Internet Explorer 7.

Alle zurück ganzzahlige Werte, beginnend mit 1 und dann um 1 für jeden Anruf zu inkrementieren und setTimeOut() setInterval(). Allerdings habe ich festgestellt, dass der Browser die Zähler und behandelt sie anders gestartet:

  • IE begann mit einer (scheinbar) zufälligen 6-stellige Nummer, aber nachfolgende Anrufe zu jeder Funktion dieser Zahl erhöht. Nach dem Schließen und IE Wiedereröffnung fand ich, dass die Startnummer erschien zufällig generiert werden, da sie bei weitem nicht die Zählung der vorherigen Sitzung war.
  • Opera erhalten einen Zähler für jeden Reiter - eine Registerkarte zu schließen und eine neue Öffnung der Zähler von 1 in der neuen Registerkarte gestartet
  • .
  • In Safari, war die Graf global - eine neue Registerkarte öffnen und die Funktionen in verschiedenen Registerkarten Aufruf schien einen globalen Referenzzähler zu erhöhen
  • .
  • In Firefox, erschien der Zähler bei 2 zu starten, und bei jedem nachfolgenden Aufruf an jede Funktion erhöht. Wie Opera hatte jeder Reiter einen eigenen Zählerwert, aber sie schienen alle bei 2 beginnen.

Beachten Sie jedoch, dass in allen Szenarien, keine zwei Kennungen (zumindest in dem gleichen Registerkarte) gleich sind.

Ich denke, es ist kein normiertes Verhalten. In Firefox, es ist nur ganze Zahl ist, bei jedem Aufruf von setTimeout oder setInterval erhöht wird. Und, nein, sie können nicht den gleichen Wert haben.

Von der Mozilla-Website:

  

intervalID ist eine einzigartige Intervall ID Sie clearInterval passieren können ().

So ist es einzigartig:)

Ob sie den gleichen Wert haben können, hängt von der JavaScript-Implementierung. Wie Maciej in Firefox erwähnt können sie den gleichen Wert nicht haben, wie der gleiche Zähler verwendet wird. Doch das könnte in anderen Browsern unterschiedlich sein, so ist es vielleicht am besten nicht zu verlassen sich auf sie nie mit dem gleichen Wert.

Es klingt für mich, dass der zurückgegebene Wert der Indexwert für was auch immer intern verwaltete Liste von Timern / Intervalle sie halten.

Wie in Punkt I genannt clearInterval (18) anstelle von clearInterval (var_returned_from_set), und es beendet das gewünschte Timer / Intervall. (Getestet FF17.0.1 und IE9.0.8)

Auch in meinen eigenen Tests erscheinen sie für die gesamte Lebensdauer der Seite für diese beiden Browser eindeutig sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top