|
var (JS)"var foobar = 23;" oder "foobar = 23;", beides sind in JavaScript gültige Ausdrücke und werden von keinem Interpreter beanstandet. Beide weisen einer Variable "foobar" den Wert "23" zu und funktionieren ohne Probleme und Nebeneffekte. Zumindest scheinbar, denn konzeptionell besteht ein großer Unterschied. Der erste Ausdruck, "var foobar = 23;", erzeugt eine lokale Variable, der der Wert 23 zugewiesen wird. Diese wird nach Beenden der Funktion wieder gelöscht, wird die Funktion erneut aufgerufen, wird die Variable neu erstellt und neu initialisiert, man kann nicht feststellen, ob es schon jemals diese Variabel gab. Anders dagegen der zweite Ausdruck, "foobar = 23;". Dieser weißt dem Attribut "foobar" des Objektes, von dem die aktuelle Funktion eine Methode ist, den Wert 23 zu. Führt man dieses Statement innerhalb einer normalen Funktion aus, wird die globale Variable "foobar" mit dem Wert 23 gefüllt, führt man es innerhalb einer Methode eines Objektes auf, wird das Attribut "foobar" dieses Objektes auf 23 gesetzt. Im Normalfall merkt man kaum einen Unterschied zwischen den beiden Ausdrücken, wohl aber dann, wenn man den Zähler einer for-Schleife mit letzterer Methode initialisiert und innerhalb der for-Schleife eine Rekursion stattfindet. Dann beginnt der Zähler wie wild und pseudozufällig hin und her zu springen und schwer reproduzierbare Fehler entstehen. Aus diesem Grund sollte man die Zähler von for-Schleifen immer mit "var" initialisieren. |