Variablen

Gültigkeit von Variablen

Es gibt globale Variablen und lokale Variablen. Globale Variablen sind, wie ihr Name nahelegt, im gesamten Dokument gültig. Lokale Variablen hingegen sind nur innerhalb einer Funktion gültig. Um ein Programm übersichtlich zu halten und schwer auffindbare Fehlerquellen zu vermeiden, ist es sinnvoll Variablen in Funktionen lokal zu halten. Bei übergebenen Parametern ist das bereits so vorgegeben, weitere Variablen müssen bei der Neudefinition unbedingt durch das Schlüsselwort var gekennzeichnet werden, anderenfalls werden sie als globale Variablen angelegt.

In vielen anderen Programmiersprachen müssen alle verwendeten Variablen vorher deklariert werden, um derartige Fehler zu vermeiden. JavaScript macht vieles implizit, d.h. ohne besonders erkennbare Angaben. Das gilt übrigens auch für den Typ der Variablen, d.h. die Frage, ob es sich um eine Zahl, eine Zeichenkette oder eine Liste handelt.

Hier ein Beispiel dafür, wie das nicht sein sollte. In der Funktion ermittle_Zeitdifferenz() wird die Variable vEingabe verwendet, obwohl diese innerhalb der Funktion Datumseingabe() definiert ist. In diesem Fall funktioniert das Programm äußerlich tatsächlich so, wie es sollte, dennoch ist es so nicht korrekt. Alle innerhalb einer Funktion definierten Variablen müssen daher mit bei erster Definition mit dem Schlüsselwort var versehen werden, damit sie als lokale Variablen definiert werden. 

Tipp: damit ihr das Datum nich bei jedem Test neu eingeben müsst, könnt ihr eine kleine Änderung in Datumseingabe() vornehmen. „Klammert“ die Eingabe mit /* … */ als Kommentar aus und fügt eine direkte Zuweisung des Wertes hinzu: vEingabe =„1.5.2015“;

function Datumseingabe() {
  /* vEingabe = window.prompt("Gib dein Geburtsdatum ... "); */
  vEingabe ="1.5.2016";
  aDatum = vEingabe.split(".");
  vDatum = new Date(aDatum[2], aDatum[1] - 1, aDatum[0]);
  return vDatum;
}

 
function ermittle_Zeitdifferenz(){
  var vJetzt = new Date();
  var vDiff = Datumseingabe() - vJetzt.getTime();
  var vTage = Tage_Differenz(vDiff);
 
  if (vTage > 0) { 
 
    /* hier wird vEingabe verwendet, obwohl diese Variable nur in der Funktion Datumseingabe gültig sein sollte */
 
    document.write("Bis zum " + vEingabe + " sind es noch " + vTage + " Tage. ");
 
  } else {
    document.write("Das ist schon " + Math.abs(vTage) + " Tage her.");
  }
}

Um nun aber die Ausgabe dennoch etwas attraktiver zu gestalten, kann die Datumsinformation in anderer Form übergeben werden. In der nächsten Stufe des Programms soll das gewählte Datum vollständig mit Wochentag und Monatsname ausgegeben werden, etwa so: Bis zum Dienstag, dem 24. März 2015 sind es noch … Tage. Die Funktion Datumseingabe() gibt einen Zahlenwert zurück, nämlich die Millisekunden seit dem 1. Januar 1970. Diesen Wert kann man verwenden, um ein neues Datumsobjekt anzulegen: var vDatum = new Date(vMillisekunden)

Aufgabe 1: Erstelle eine neue Funktion Datum_als_Text(), die als Übergabewert die Anzahl der Millisekunden seit 1970 und einen Artikel ('der', 'den', 'dem') erhält und dann das Datum in der Form Dienstag, dem 24. März 2015zurückgibt. Du kannst dazu Funktionen aus vorherigen Programmen verwenden.

   function Datum_als_Text(vMillisekunden, vArtikel) {
      var vDatum = new Date(vMillisekunden);
 
      ...
 
      return vWochentag + ", " + vArtikel + " " + vTag + ". " + vMonat + " " + vJahr;
   }