Paul: redeclaration of var

Moin,
bei dieser Frage geht es mir nicht um Geschwindigkeit sondern nur ums Prinzip.

if (...) {
  var a = 1;
}
else {
  var a = 2;
}

Das a kann nur einmal "getroffen" werden und ist somit für mich nur einmal iniziert. Meine IDE (Netbeans) sagt mir aber "TypeError: redeclaration of var a".

Natürlich kann ich das var a auch vor das if-else schreiben. Nur irgendwo hab ich mal gelehrnt, dass man den Variablen gleich einen Wert zuweisen soll, damit nicht erst wieder in der Variablen-Liste nach der eben erzeugten gesucht werden muss.

Wie gesagt: hier geht es mir nur ums Prinzip. Im "realen" Leben wird man wohl keinen Unterschied merken.

  1. bei dieser Frage geht es mir nicht um Geschwindigkeit sondern nur ums Prinzip.

    if (...) {
      var a = 1;
    }
    else {
      var a = 2;
    }

    Das Problem ist, dass JS keinen blockscope hat, sondern nur einen functionscope. D.h. die Deklaration innerhalb einer Funktion erfolgt hier vom Prinzip zweimal. Auch wenn es tatsächlich zur Laufzeit nur einmal passiert.

    Natürlich kann ich das var a auch vor das if-else schreiben.

    Da ich viel mit Perl mache (wo es Blockscoping gibt), habe ich mir angewöhnt die Variabel auch in JS so zu deklarieren. Ob das wirklich einen entscheidenen Geschwindigkeitsvorteil bringt weiß ich nicht.

    Struppi.

    1. Vielen Dank!