Diese Übersetzung ist unvollständig. Bitte helfen Sie, diesen Artikel aus dem Englischen zu übersetzen.
Default function parameters (vorgegebener Funktions-Paramater) erlaubt formale Parameter mit vorgegebene Werten initialisiert zu werden, wenn kein Wert zugewiesen oder undefined ist.
Syntax
function [name]([param1[ = defaultValue1 ][, ..., paramN[ = defaultValueN ]]]) {
statements
}
Beschreibung
In JavaScript werden Default-Parameter oder Funktionen als definiertundefined . Manchmal ist es jedoch sinnvoll einen anderen Default-Wert zu setzen. Hier helfen Default-Parameter weiter.
In der Vergangenheit war die allgemeine Strategie für das Setzen von Default-Werten das Testen von Parameter-Werten im Body der Funktion und dem Zuordnen eines Default-Wertes, wenn dieser undefined ist. Wenn in dem folgenden Beispiel bei dem Aufruf kein Wert für b mitgegeben wird, würde der Wert undefined sein. Bei der Auswertung von a*b und dem Aufruf von multiply wird als Rückgabewert NaN zurückgegeben. Im Beispiel wird deshalb dieser Rückgabewert in der zweiten Zeile der Funktion aufgefangen:
function multiply(a, b) {
b = (typeof b !== 'undefined') ? b : 1;
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
Mit dem Default-Parameter in ES2015 ist die Prüfung im Funktions-Körper nicht mehr nötig. Jetzt kannst du einfach 1 als den Standart-Wert für b in dem Funktions-Kopf definieren:
function multiply(a, b = 1) {
return a * b;
}
multiply(5, 2); // 10
multiply(5, 1); // 5
multiply(5); // 5
Beispiele
Übergehen von undefined
In dem zweiten Aufruf hier, auch wenn das zweite Argument expliziet auf undefined gesetzt ist, (jedoch nicht null) ist der Wert des color Arguments beim Aufruf der Default-Wert.
function setBackgroundColor(element, color = 'rosybrown') {
element.style.backgroundColor = color;
}
setBackgroundColor(someDiv); // wird gesetzt zu 'rosybrown'
setBackgroundColor(someDiv, undefined); // wird ebenfalls gesetzt zu 'rosybrown'
setBackgroundColor(someDiv, 'blue'); // color wird gesetzt zu'blue'
Auswerten beim Aufruf
Das Standard-Argument wird zum Zeitpunkt des Aufrufs ausgewertet - anders als z.B. in Python - es wird ein neues Objekt bei jedem Funktions-Aufruf erzeugt.
function append(value, array = []) {
array.push(value);
return array;
}
append(1); //[1]
append(2); //[2], nicht [1, 2]
Das Gleiche gilt für Funktionen und Variablen:
function callSomething(thing = something()) {
return thing;
}
function something(){
return "sth";
}
callSomething(); //sth
Default-Parameter sind auch zu späteren Default-Parameter zur Verfügung
Die bereits angetroffenen Parameter stehen den späteren Standardparametern zur Verfügung:
function singularAutoPlural(singular, plural = singular+"s",
rallyingCry = plural + " ATTACK!!!") {
return [singular, plural, rallyingCry ];
}
//["Gecko","Geckos", "Geckos ATTACK!!!"]
singularAutoPlural("Gecko");
//["Fox","Foxes", "Foxes ATTACK!!!"]
singularAutoPlural("Fox","Foxes");
//["Deer", "Deer", "Deer ... change."]
singularAutoPlural("Deer", "Deer", "Deer peaceably and respectfully
petition the government for positive change.")
Diese Funktionalität wird in einer geradlinigen Weise angenähert und zeigt, wie viele Randfälle behandelt werden:
function go() {
return ":P"
}
function withDefaults(a, b = 5, c = b, d = go(), e = this,
f = arguments, g = this.value) {
return [a,b,c,d,e,f,g];
}
function withoutDefaults(a, b, c, d, e, f, g){
switch(arguments.length){
case 0:
a
case 1:
b = 5
case 2:
c = b
case 3:
d = go();
case 4:
e = this
case 5:
f = arguments
case 6:
g = this.value;
default:
}
return [a,b,c,d,e,f,g];
}
withDefaults.call({value:"=^_^="});
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
withoutDefaults.call({value:"=^_^="});
// [undefined, 5, 5, ":P", {value:"=^_^="}, arguments, "=^_^="]
Funktionen definiert innerhalb des Funktions-Körpers
Introduced in Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30). Functions declared in the function body cannot be referred inside default parameters and throw a ReferenceError (currently a TypeError in SpiderMonkey, see Bug 1022967). Default parameters are always executed first, function declarations inside the function body evaluate afterwards.
// Funktioniert nicht! Wird einf ReferenceError aus.
function f(a = go()) {
function go(){return ":P"}
}
Paramater ohne Default nach Default-Parameter
Bevor Gecko 26 (Firefox 26 / Thunderbird 26 / SeaMonkey 2.23 / Firefox OS 1.2) wurd der folgende Code folgendes ein SyntaxError wiedergeben. Dieses wurde behoben in Bug 777060 und funktioniert wie erwartet in späteren Versionen:
function f(x=1, y) {
return [x, y];
}
f(); // [1, undefined]
Zerstörter Parameter mit Standardwertzuordnung
Sie können die Standardwertzuordnung mit der Zerstörungszuordnung Schreibweise verwenden:
function f([x, y] = [1, 2], {z: z} = {z: 3}) {
return x + y + z;
}
f(); // 6
Spezifikationen
| Spezifikation | Status | Kommentar |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'Function Definitions' in dieser Spezifikation. |
Standard | Initial definition. |
| ECMAScript 2017 Draft (ECMA-262) Die Definition von 'Function Definitions' in dieser Spezifikation. |
Entwurf |
Browserkompatibilität
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basis Unterstützung | 49 | 15.0 (15.0) | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt |
Parameter ohne Vorgaben nach Standardparametern |
49 | 26.0 (26.0) | ? | ? | ? |
Zerstörter Parameter mit Standardwertzuordnung |
49 | 41.0 (41.0) | ? | ? | ? |
| Feature | Android | Android Webview | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile | Chrome for Android |
|---|---|---|---|---|---|---|---|
| Basis Unterstützung | Nicht unterstützt | 49 | 15.0 (15.0) | Nicht unterstützt | Nicht unterstützt | Nicht unterstützt | 49 |
| Parameter ohne Vorgaben nach Standardparametern | Nicht unterstützt | 49 | 26.0 (26.0) | ? | ? | ? | 49 |
| Zerstörter Parameter mit Standardwertzuordnung | Nicht unterstützt | ? | 41.0 (41.0) | ? | ? | ? | ? |