Ein Interval wird nie aufgerufen, da der Rückgabewert von test() undefiniert ist, er müßte aber eine Funktionsreferenz sein.
Stimmt, weil die Funktion ja nie ein Ende findet.
Nein, es gibt einfach kein Interval der ausgfeührt werden kann, da test() undefined zurückliefert.
Deshalb:
Die Fehlerkonsole sagt "too much recursion" und im div steht 3000.
Hm, die 3000 ist dann vermutlich der von Firefox bestimmte Wert wie oft er versucht die Funktion zu Ende zu bringen.
Wie tief die Rekursion geht, ja.
Daher besser:
var loop = window.setTimeout(function() { test(foo);}, 1000);
Danke, ich bin leider nicht so fit in den JavaScript-Funktionen und ich finde bei SelfHtml werden viele Sachen in der Richtung nur leicht "angekratzt" oder man findet sie sehr schwer[1]. Das macht es manchmal schwer. Und Google ist auch nicht immer eine kompetente Lösung.
Funktionsreferenzen, closures oder anonyme Funktionen sind auch nicht unbedingt Themen die in eine Doku müssen, die auch für Einsteiger gedacht ist. Dafür gibt es aber z.b. diesen ausführlichen Artikel von Mathias.
Schreibe ich
var loop = setInterval('test(foo)', 1000);
zeigt mir die Fehlerkonsole jede Sekunde "foo is not defined" und im div bleibt 1 stehn.Weil dann die Funktion im Kontext von window ausgeführt wird und dort ist foo nicht definiert.
Achso, also "eine Etage über" der Funktion? Oder hab ich das falsch verstanden?
Ja, das kann man so sagen.
Struppi.