Die Rückgabeanweisung in JavaScript
Wir haben bisher zwei Arten von Funktionsdefinitionen kennengelernt:
- Pfeilfunktionen ohne Block ergeben den Wert des rechts vom Pfeil angegebenen Ausdrucks.
- Blockfunktionen ergeben keinen Wert (außer »undefined«).
In dieser Lektion wird nun erklärt, wie auch eine Blockfunktion einen Wert zurückgeben kann.
Die Rückgabeanweisung
Syntax
Die Rückgabeanweisung besteht aus dem Wort »return«, einem optionalen Ausdruck und einem Semikolon »;«.
Die Syntax für die return-Anweisung (Rückgabeanweisung) lautet wie folgt.
- Rückgabeanweisung
Rueckgabeanweisung
.ooooooooooooooooooo.
o o
.------. o .----------. v .-.
--->( return )ooo'ooo>| Ausdruck |ooo'ooo>( ; )--->
'------' '----------' '-'
Den Ausdruck zwischen »return« und dem Semikolon »;« nennen wir auch den Rückgabeausdruck oder return-Ausdruck dieser return-Anweisung.
Dieser Ausdruck kann auch entfallen, was dieselbe Bedeutung hat, wie die Verwendung des Ausdrucks »undefined«. »return;« bedeutet als »return undefined;«.
Semantik
Die Auswertung einer Rückgabeanweisung im Block einer Blockfunktion legt den Wert der aktuellen Inkarnation (also des aktuellen Aufrufs) jener Funktion fest und beendet dann die Auswertung der Inkarnation.
Beispiele
Wir zeigen zunächst ein Pfeilfunktion der schon bekannten Art, die den Wert 2 ergibt.
- Auswertung
f = ()=> 2
function f()
- Auswertung
f()
2
Eine Pfeilfunktion, die den Wert 2 ergibt, kann nun auch als eine Blockfunktion definiert werden. In diesem Fall muß die Wertrückgabe mit der Rückgabeanweisung erfolgen.
- Auswertung
f = ()=> { return 2; }
function f()
- Auswertung
f()
2
Wirkungen und Wert, Rückgabe und Ausgabe
Vor die Rückgabeanweisung können auch andere Anweisungen geschrieben werden.
- Auswertung
f = ()=> { console.log( 4 ); return 2; }
function f()
- Auswertung
f()
4
2
Oben ist die Ausgabe von »4« die Wirkung der Funktion »f« und »2« der Wert der Funktion »f«.
Der Text »4« wird von der Funktion ausgegeben, während die Zahl »2« von der Funktion zurückgegeben wird.
Die Ausgabe erfolgt in der Funktion mit der Anweisung »console.log( 4 );«, die Rückgabe mit der Anweisung »return 2;«.
Man beachte den Unterschied zwischen Wirkung und Wert, beziehungsweise zwischen Ausgabe und Rückgabe !
»return« und Leerraum
Man beachte, daß nach »return« Leerraum nötig ist, wenn ein Name oder Numerale direkt folgt, weil das Schlüsselwort »return« sonst mit diesem zu einer lexikalischen Einheit verschmelzen würde.
- Eine lexikalische Einheit
returnx
- Zwei lexikalische Einheiten
return x
- Eine lexikalische Einheit
return7
- Zwei lexikalische Einheiten
return 7
Das Sonderzeichen nicht Teil eines Worts sein können, ist vor ihnen nicht unbedingt Leerraum nötig.
- Drei lexikalische Einheiten
return+7
- Vier lexikalische Einheiten
return( 7 )
»return« und Zeilenende
Bei
- Quelltext
return
7
- Quelltext
wird automatisch ein Semikolon hinter »return« eingefügt. Es ergibt sich also die folgende Sequenz:
- Quelltext
return;
7;
Die Wirkung der obenstehenden Sequenz ist wie die Wirkung der folgenden Anweisung.
- Quelltext
return undefined;
Selbst in den folgenden Quelltext wird ein Semikolon hinter das »return« eingefügt.
- Quelltext
return/*
*/7
Wenn ein numerischer Rückgabeausdruck hinter »return« erst in der nächsten Zeile folgen soll, gibt es aber doch Möglichkeiten zu verdeutlichen, daß die Rückgabeanweisung noch nicht abgeschlossen ist.
- Quelltext
return +
7;
Klammern können die Fortsetzung auch für andere Datentypen ermöglichen.
- Quelltext
return (
"abc" );
»return« im onclick-Attribut
Viele Browser akzeptieren »;return true« oder »;return false« am Ende des onclick-Attributwertes, um festzulegen, ob nach der Ereignisbehandlung zu der href-Adresse weitergegangen werden soll, aber dieser Stil gilt als veraltet. Wir werden später bessere Alternativen dafür kennenlernen.
Main.html
Element:
<span
id=a
onclick="alert('angeklickt!');return false">
Text</span>
Übungsfragen
? Übungsfrage
Was ist die Ausgabe der folgenden Sequenz?
- Sequenz
beta = ()=> { return "[]"; };
zeta = ()=> { return "[" + beta() + "]"; };
main = ()=> { console.log( zeta() ); };
main();
Übungsaufgaben
/ Übungsaufgabe
Schreiben Sie die beiden folgenden Definitionen von Pfeilfunktionen in Definitionen von Blockfunktionen um. (Der Aufruf von »g« sollte dann weiterhin »19« ergeben.)
- Eingaben
f = x => x * 5
g = ()=> f( 4 )- 1
/ Übungsaufgabe
Schreiben Sie die beiden folgenden Definitionen von Blockfunktionen in Definitionen von Pfeilfunktionen ohne Block um. (Der Aufruf von »g« sollte dann weiterhin »14« ergeben.)
- Eingaben
f = x => { return 2 * x; }
g = ()=> { return 8 + f( 3 ); }
Zitat *
- Zitat aus ECMAScript 2016, 11.6.2.1 (vereinfacht und gekürzt) *
- The following tokens are ECMAScript keywords and may not be used as Identifiers in ECMAScript programs.
Keyword one of:
in typeof return