JavaScript-Bug ganz subtil

Posted by in JavaScript

JavaScript ist manchmal eine Sprache, die subtile Bugs produziert. Hier ist die Preisfrage: Was ist an diesem Code-Schnipsel falsch und was sind die Auswirkungen?

Keine Idee? Ich musste auch erst überlegen, da ich solche Fehler eigentlich nirgendwo erwarten würde. Das Problem ist in Zeile 6 zu finden. Die Variable json_data wird dort initialisiert. Leider nicht im lokalen Scope, sondern anscheinend im globalen Scope. Von JSON.parse() wird ein Array zurückgeliefert. Beim Debuggen hat sich dann gezeigt, dass die Array.length nicht zurückgesetzt wird. Hat es die Länge 10 bei einem Durchlauf einmal angenommen, so ändert sich diese nicht mehr.

Damit produziert man ein Endlosschleife, da bei einer Länge von 10, page_ajax() immer wieder aufgerufen wird (Zeile 19).

Die Lösung ist ein json_data = null; gleich zu Beginn der Funktion. Wäre ES2015 schon in jedem Browser der Standard, dann würde auch ein einfaches let json_data ausreichend. Damit würde die Variable im lokalen Scope der Funktion landen.

Fazit

Es wird Zeit, dass ES2015 überall funktioniert, um solche Bugs zu vermeiden 😉