Gültigkeitsbereich von Variablen
In einer Funktion kannst du Variablen mit let und const erstellen, genau wie überall sonst. Aber eine solche Variable existiert nur innerhalb der Funktion: Sie wird erstellt, wenn die Funktion läuft, und verschwindet, wenn die Funktion endet. Außerhalb der Funktion kennt JavaScript sie nicht:
function begruesse() {
const nachricht = "Hallo!";
console.log(nachricht);
}
begruesse();
console.log(nachricht);Das gibt Hallo! aus und endet dann mit dem Fehler ReferenceError: nachricht is not defined. Der Aufruf begruesse() hat funktioniert, aber die letzte Zeile sucht nachricht außerhalb der Funktion, wo es nicht existiert. Mit Parametern ist es genauso: Sie existieren nur innerhalb ihrer Funktion.
Den Teil eines Programms, in dem eine Variable existiert, nennt man ihren Gültigkeitsbereich (englisch scope). Eine Variable, die in einer Funktion erstellt wird, ist lokal: Sie gehört nur zu dieser Funktion. Eine Variable, die außerhalb aller Funktionen erstellt wird, kann im ganzen Programm benutzt werden, auch in Funktionen:
const ladenName = "Tierecke";
function gibEtikettAus(produkt) {
console.log(`${ladenName}: ${produkt}`);
}
gibEtikettAus("Hundefutter");Das gibt aus:
Tierecke: HundefutterWarum ist es nützlich, dass lokale Variablen in ihren Funktionen bleiben?
- Funktionen kommen sich nicht in die Quere. Zwei Funktionen können jeweils eine Variable namens
gesamthaben, und das sind zwei verschiedene Variablen: Wenn man die eine ändert, ändert sich die andere nicht. - Um eine Funktion zu benutzen, musst du nur wissen, was du ihr gibst (die Argumente) und was sie zurückgibt (den Rückgabewert). Wie sie innen funktioniert, ist ihre eigene Sache.
- Jeder Aufruf beginnt von vorn: Die Variablen der Funktion werden neu erstellt, ohne dass etwas vom vorigen Aufruf übrig bleibt.
Wenn du also einen Wert aus einer Funktion brauchst, greife nicht nach ihrer Variable. Gib den Wert mit return zurück und speichere ihn dort, wo du die Funktion aufrufst.
Übrigens gilt dieselbe Regel für jeden Block in geschweiften Klammern: Eine Variable, die mit let oder const innerhalb eines if oder einer Schleife erstellt wird, existiert nur in diesem Block.
So schreibst du es:
Anweisungen
- 1
Das Programm endet mit dem Fehler
ReferenceError: gesamt is not defined, weilgesamtnur innerhalb der Funktion existiert. Behebe das: Gibgesamtaus der Funktion zurück. Speichere unterhalb der Funktion das Ergebnis des Aufrufsbestellpreis(25, 4)in einer Variablerechnungund gibrechnungstattgesamtaus. Das Programm gibt100aus. - 2
Jede Bestellung kostet zusätzlich
5Versand. Erstelle oberhalb der Funktion eine Variableversandmit dem Wert5. Addiere sie innerhalb der Funktion zum Gesamtpreis, sodass das Programm105ausgibt.