molily: Kommata / Semikolon Fehler

Beitrag lesen

Hallo,

Das  'var'  gibt ja an, dass es sich bei "var d = new Date()" um eine lokale Variable handelt..

Genau. Es ist eine Grundregel der JavaScript-Programmierung, möglichst lokale anstatt globale Variablen zu erzeugen.

Wird dieses 'var' dann auch auf die folgenden Anweisungen übertragen wenn man Kommata verwendet?

Ja, diese Zuweisungen sind dann ebenfalls Deklarationen von lokalen Variablen.

var foo = 1, bar = 2, …; ist das sogenannte Variablen-Statement. Es lassen sich mehrere Variablen durch Komma getrennt notieren, und mit dem Zuweisungsoperator lässt sich ihnen direkt ein Wert zuweisen.

Nur deklarieren:

var foo, bar, qux;

Bar wird ein Wert zugewiesen:

var foo, bar = 1, qux;

Das entspricht jeweils drei separaten Variablen-Statements. Das heißt, es ist austauschbar mit:

var foo;  
var bar = 1;  
var qux;

Lässt du das Komma weg, kann es einen Referenzfehler geben. Wenn nicht, dann werden globale Variablen erzeugt.

Drei lokale Variablen:

var foo = 1,  
  bar = 2,  
  qux = 3;

Fehler:

var foo;   // Sollte ein Komma sein  
  bar = 2; // Erzeugt globale Variable  
  qux;     // ReferenceError: qux kann nicht gefunden werden

Eine lokale Variable, zwei globale:

var foo = 1; // Sollte ein Komma sein  
  bar = 2;   // Dito, globale Variable  
  qux = 3;   // Global

Komma vergessen kann auch zu globalen Variabl führen:

var foo = 1  // Komma fehlt, also fügt der JS-Parser ein Semikolon ein  
  bar = 2,   // Globale Variable  
  qux = 3;   // Dito

Solche Fehler kann man vermeiden, indem man konsequent im ECMAScript-5-Strict-Mode arbeitet.

Beispiel:

var registerVariables = function() {  
  // Aktiviere Strict-Mode  
  'use strict';  
  var foo = 1; // Hier sollte ein Komma stehen  
    bar = 2;   // <- wirft einen ReferenceError, weil eine globale Variable erzeugt werden würde  
  // Wird nicht mehr ausgeführt:  
  alert(foo + bar);  
};

Im Strict Mode lassen sich globale Variablen nur explizit mit window.globaleVariable = 'wert' erzeugen.

Mathias