Kurs: JavaScript

4.4 Lokale und globale Variablen in Funktionen

Wie andere Programmiersprachen bietet auch JavaScript die Möglichkeit, Variablen global für das ganze Programm oder auch nur lokal in einzelnen Funktionen zu definieren. In der Lerneinheit über Variablen haben Sie erfahren, dass diese einen Namen und einen Wert erhalten können. Man kann aber zusätzlich auch ihren Geltungsbereich einschränken, wenn man sie nur innerhalb eines Teils des Programmtextes, z.B. einer Funktion, definiert.

Wenn Sie eine Variable, wie Sie es gewohnt sind, außerhalb einer Funktion deklarieren, ist diese im gesamten Programm bekannt, d.h. der Interpreter bezeichnet mit diesem Variablennamen immer den gleichen Speicherplatz, und wenn Sie etwas hineingeschrieben haben, können Sie diesen Wert im gesamten Programm wieder auslesen.

Wenn Sie nun eine Variable innerhalb einer Funktion, also zwischen der öffnenden und der schließenden geschweiften Klammer, deklarieren, ist die Variable nur innerhalb der Funktion bekannt. Sie wird dann als lokale Variable bezeichnet.

Folgendes Beispiel soll Ihnen die beiden Möglichkeiten verdeutlichen:

Skriptbeispiel für lokale und globale Variablen
<html>
  <head>
    <script type="text/javascript">
 
      var a = "global";
 
      function ausgabe_1() {
        var c = "lokal";
        document.write("ausgabe_1<br> A: " + a + "; C: " + c + "<br><br>");
      }
 
      function ausgabe_2() {
        document.write("ausgabe_2<br> A: " + a);
        document.write(" C: " + c); 
        // an dieser Stelle wird eine Fehlermeldung ausgegeben, weil c in
        // dieser Funktion nicht definiert ist
      }
    </script>
  </head>
  <body>
    <script type="text/javascript">
      //Funktionsaufrufe
      ausgabe_1();
      ausgabe_2();
      document.write(" C: " + c); 
      // an dieser Stelle wird eine Fehlermeldung ausgegeben, weil c im
      // Code außerhalb der Funktion nicht definiert ist
    </script>         
  </body>
</html>
Ansehen

Die Ausgabe, die durch dieses Skript erzeugt wird, ist zum genauen Verständnis wahrscheinlich noch etwas erklärungsbedürftig:

Wird eine Variable außerhalb einer Funktion initialisiert oder deklariert, wie es bei var a = "global" im Beispielskript der Fall ist, dann wird sie als global angesehen und steht somit jeder Funktion zur Verfügung. Das bedeutet, dass Sie die Variable überall benutzen können: an beliebiger Stelle im Quelltext oder auch in anderen Funktionen.

Anders sieht es bei der Variablen c aus: Sie wird nur in der Funktion ausgabe_1() deklariert und ist nur in dieser Funktion bekannt (lokal). Sie können die Variable zwar innerhalb des Quelltextes der Funktion ganz normal benutzen, außerhalb davon jedoch nicht. Sobald der Quelltext der Funktion ausgabe_1() verlassen wird, "vergisst" der Rechner, dass es die Variable c überhaupt gibt. Eine Verwendung der Variablen c in einer anderen Funktion führt damit unweigerlich zu einer Fehlermeldung. Dagegen sehen Sie, dass die global initialisierte Variable a auch in der Funktion ausgabe_2() bekannt ist und ausgegeben wird.

Wir wollen das Beispiel noch ein wenig vergrößern, um Ihnen wirklich alle Gültigkeitsregeln von lokalen bzw. globalen Variablen zu zeigen:

Skriptbeispiel für lokale und globale Variablen
 
<html>
  <head>
    <script type="text/javascript">
 
      var a = "global";
 
      function ausgabe_1() {
        b= "global";
        var c = "lokal";
        document.write("ausgabe_1<br> A: " + a + "; B: " + b + "; C: " + c + "<br><br>");
        ausgabe_2();
      }
                    
      function ausgabe_2() {
        document.write("ausgabe_2<br> A: " + a);
        document.write(" B: " + b);
        document.write(" C: " + c); // Fehlermeldung!
      }
    </script>
  </head>
  <body>
    <script type="text/javascript">
      //Funktionsaufrufe
      ausgabe_1();
      ausgabe_2();
      document.write(" B: " + b);
      document.write(" C: " + c); // Fehlermeldung!
    </script>         
  </body>
</html>
Ansehen

Sie sehen, dass nun noch eine dritte Variable b dazugekommen ist. Sie wird überhaupt nicht deklariert, sondern nur in der Funktion ausgabe_1() mit einem Wert initialisiert. Variablen ohne Deklaration sind in JavaScript immer global, Sie können also, wie Sie im Beispiel sehen, sowohl aus anderen Funktionen als auch aus dem Hauptprogramm auf sie zugreifen. Um Unklarheiten zu vermeiden, empfiehlt es sich, Variablen immer zu deklarieren, um wirklich deutlich zu machen, wo eine Variable bekannt ist und wo nicht.

Die zweite Änderung betrifft die lokale Variable c. In der Erweiterung des Beispiels wird nun die Funktion ausgabe_2() aus der Funktion ausgabe_1() heraus aufgerufen. Trotzdem kann ausgabe_2() nicht auf die lokale Variable c zugreifen. Die lokalen Variablen werden also nicht(!) an Funktionsaufrufe innerhalb einer Funktion weitergegeben.

Globale Variablen sind Variablen, die im gesamten Programm verfügbar sind. Lokale Variablen werden hingegen so deklariert bzw. initialisiert, dass sie nur in einem bestimmten Skriptteil, also in einer bestimmten Funktion, gelten. Es empfiehlt sich, beim Programmieren lokalen Variablen den Vorzug zu geben. Durch lokale Variablen bleibt die erwünschte Unabhängigkeit von Funktionen vom jeweiligen Hauptprogramm erhalten. Sie müssen sich, wenn Sie eine Funktion schreiben, nicht mit den anderen Kollegen absprechen, wie sie denn wohl ihre Variablen nennen werden, damit es keine Konflikte gibt. Außerdem werden durch die erzielte Übersichtlichkeit Fehler vermieden oder gegebenenfalls leichter aufgefunden. Schließlich müssen Sie nicht mehr den gesamten Quelltext durchsuchen, um den Wert einer Variablen zu verfolgen, sondern nur noch eine einzelne Funktion.

Lokale Variablen verwenden Sie also immer für nur innerhalb einer Funktion benötigte Variablen, z.B. den Schleifenzähler i, der nach der Beendigung der Schleife meist sowieso nicht mehr benötigt wird. Sie können dabei innerhalb verschiedener Funktionen gleiche Variablennamen benutzen, ohne dass Konflikte auftreten. Denken Sie also wirklich immer an die Deklaration von Variablen, um die Vorteile von lokalen Variablen zu nutzen.
Obwohl die Beschränkung auf lokale Variablen in den meisten Fällen wünschenswert ist, gibt es Werte, die sie über das gesamte Programm hinweg speichern müssen. Verwenden Sie dann globale Variablen, die Sie im Hauptprogramm außerhalb von Funktionen deklarieren.