Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit September 2016 browserübergreifend verfügbar.
Standard-Funktionsparameter ermöglichen es, benannte Parameter mit Standardwerten zu initialisieren, falls kein Wert oder undefined übergeben wird.
In JavaScript haben Funktionsparameter standardmäßig den Wert undefined. Es ist jedoch oft nützlich, einen anderen Standardwert festzulegen. Hierbei helfen Standardparameter.
Im folgenden Beispiel, wenn kein Wert für b bereitgestellt wird, wenn multiply aufgerufen wird, wäre der Wert von b undefined, wenn a * b ausgewertet wird, und multiply würde NaN zurückgeben.
Früher war es allgemein üblich, Standardwerte zu setzen, indem man Parameterwerte im Funktionskörper testet und ihnen einen Wert zuweist, wenn sie undefined sind. Im folgenden Beispiel wird b auf 1 gesetzt, wenn multiply nur mit einem Argument aufgerufen wird:
Mit Standardparametern sind Prüfungen im Funktionskörper nicht mehr notwendig. Nun kann 1 als Standardwert für b im Funktionskopf zugewiesen werden:
Parameter werden weiterhin von links nach rechts gesetzt und überschreiben Standardparameter selbst dann, wenn es spätere Parameter ohne Standardwerte gibt.
Hinweis: Der erste Standardparameter und alle Parameter danach tragen nicht zur length der Funktion bei.
Die Initialisierer der Standardparameter befinden sich in einem eigenen Gültigkeitsbereich, der ein Elternteil des für den Funktionskörper erstellten Gültigkeitsbereichs ist.
Das bedeutet, dass frühere Parameter in den Initialisierern späterer Parameter referenziert werden können. Funktionen und Variablen, die im Funktionskörper deklariert sind, können jedoch nicht aus den Initialisierern der Standardwerte referenziert werden; ein Versuch dies zu tun führt zu einem Laufzeit-ReferenceError. Dies schließt auch mit var deklarierte Variablen im Funktionskörper ein.
Zum Beispiel wird die folgende Funktion einen ReferenceError auslösen, wenn sie aufgerufen wird, da der Standardparameterwert keinen Zugriff auf den Kind-Gültigkeitsbereich des Funktionskörpers hat:
Diese Funktion wird den Wert des Parameters a ausgeben, da die Variable var a nur an den Anfang des für den Funktionskörper erstellten Gültigkeitsbereichs gehoben wird und ihr Wert im Elternbereich, der für die Parameterliste erstellt wird, nicht sichtbar ist.
Der Standardparameter erlaubt jeden Ausdruck, aber es kann nicht await oder yield verwendet werden, die die Auswertung des Standardausdrucks pausieren würden. Der Parameter muss synchron initialisiert werden.
Hinweis: Da der Standardparameter ausgewertet wird, wenn die Funktion aufgerufen wird, nicht wenn die Funktion definiert wird, hängt die Gültigkeit der await- und yield-Operatoren von der Funktion selbst ab, nicht von der umgebenden Funktion. Zum Beispiel, wenn die aktuelle Funktion nicht async ist, wird await als Bezeichner geparst und folgt den normalen Bezeichner-Syntaxregeln, selbst wenn diese Funktion in einer async-Funktion geschachtelt ist.
Im zweiten Aufruf in diesem Beispiel, selbst wenn das erste Argument explizit auf undefined gesetzt ist (jedoch nicht null oder andere falsy Werte), bleibt der Wert des num-Arguments der Standardwert.
Das Standardargument wird zur Aufrufzeit ausgewertet. Anders als in Python (zum Beispiel) wird jedes Mal, wenn die Funktion aufgerufen wird, ein neues Objekt erstellt.
Dies gilt auch für Funktionen und Variablen:
Früher definierte Parameter (links) sind für spätere Standardparameter verfügbar:
Diese Funktionalität kann so approximiert werden, was zeigt, wie viele Randfälle behandelt werden:
Sie können Standardwertzuweisungen mit der Destrukturierungs-Syntax verwenden.
Eine gängige Methode dafür ist, ein leeres Objekt/Array als Standardwert für den destrukturierten Parameter festzulegen; zum Beispiel: [x = 1, y = 2] = []. Dies ermöglicht es, der Funktion nichts zu übergeben und dennoch diese Werte vorausgefüllt zu haben:
| ECMAScript® 2027 Language Specification # sec-function-definitions |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.