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.
