Heim  >  Artikel  >  Web-Frontend  >  Eingehende Untersuchung der Rest-Parameter und Parameter-Standardwerte in JavaScript_Grundkenntnisse

Eingehende Untersuchung der Rest-Parameter und Parameter-Standardwerte in JavaScript_Grundkenntnisse

WBOY
WBOYOriginal
2016-05-16 15:48:341128Durchsuche

In diesem Artikel werden zwei Funktionen besprochen, die JavaScript-Funktionen ausdrucksvoller machen: Restparameter und Parameterstandardwerte.
Restparameter

Normalerweise müssen wir eine Funktion mit variablen Parametern erstellen. Variable Parameter bedeuten, dass die Funktion eine beliebige Anzahl von Parametern akzeptieren kann. Beispielsweise kann String.prototype.concat eine beliebige Anzahl von Zeichenfolgen als Argumente akzeptieren. Mithilfe von Rest-Parametern bietet uns ES6 eine neue Möglichkeit, variadische Funktionen zu erstellen.

Lassen Sie uns eine Beispielfunktion „containsAll“ implementieren, um zu überprüfen, ob eine Zeichenfolge bestimmte Teilzeichenfolgen enthält. Beispielsweise gibt „containsAll("banana", „b“, „nan“) „true“ und „containsAll(“banana“, „c“, „nan“) „false“ zurück.

Das Folgende ist die traditionelle Implementierung:

function containsAll(haystack) {
 for (var i = 1; i < arguments.length; i++) {
  var needle = arguments[i];
  if (haystack.indexOf(needle) === -1) {
   return false;
  }
 }
 return true;
}
 
function containsAll(haystack) {
 for (var i = 1; i < arguments.length; i++) {
  var needle = arguments[i];
  if (haystack.indexOf(needle) === -1) {
   return false;
  }
 }
 return true;
}

Diese Implementierung verwendet das Argumentobjekt, ein Array-ähnliches Objekt, das die tatsächliche Parameterliste enthält, wenn die Funktion aufgerufen wird. Dieser Code ist genau das, was wir wollen, aber seine Lesbarkeit ist nicht optimal. Die Funktion hat nur einen formalen Parameter-Heuhaufen, daher ist es unmöglich, auf einen Blick zu erkennen, dass die Funktion mehrere Parameter benötigt. Beim Durchlaufen von Argumenten müssen Sie besonders darauf achten, dass der Startindex der Durchquerung 1 und nicht die gemeinsame 0 ist. weil arguments[0] die Funktion ist Der formale Parameter Heuhaufen, wenn definiert. Wenn wir einige Parameter vor oder nach dem Haystack-Parameter hinzufügen möchten, müssen wir die innere Schleife aktualisieren. Rest-Parameter lösen diese Probleme. So verwenden Sie Rest-Parameter:

function containsAll(haystack, ...needles) {
 for (var needle of needles) {
  if (haystack.indexOf(needle) === -1) {
   return false;
  }
 }
 return true;
}
 
function containsAll(haystack, ...needles) {
 for (var needle of needles) {
  if (haystack.indexOf(needle) === -1) {
   return false;
  }
 }
 return true;
}

Beide oben genannten Implementierungen erfüllen unsere Anforderungen, letztere enthält jedoch eine spezielle ...needles-Syntax. Werfen wir einen Blick auf die Details beim Aufruf von containsAll("banana", "b", "nan"). Der Parameter haystack wird wie gewohnt mit dem ersten Argument der Funktion gefüllt, mit dem Wert „banana“ und den Ellipsen vor den Nadeln Zeigt an, dass es sich um einen Rest-Parameter handelt. Alle verbleibenden tatsächlichen Parameter werden in ein Array eingefügt und das Array wird der Bedarfsiteration zugewiesen. In diesem Aufruf ist der Wert der Bedürfnisse [„b“, „nan“]. Anschließend wird die normale Funktion ausgeführt.

Nur ​​die letzte Funktion der Funktion kann als Rest-Parameter verwendet werden. Wenn die Funktion aufgerufen wird, werden die Parameter vor dem Rest-Parameter normal ausgefüllt und die anderen Parameter werden in ein Array eingefügt wird als Rest verwendet. Wenn keine weiteren Parameter vorhanden sind, ist der Wert des Rest-Parameters ein leeres Array [].
Standardwert des Parameters

Normalerweise muss der Aufrufer beim Aufrufen einer Funktion nicht alle möglichen Parameter übergeben, und die Parameter, die nicht übergeben werden, benötigen einen angemessenen Standardwert. JavaScript hat einen festen Standardwert von undefiniert für Parameter, die nicht übergeben werden. In ES6 wurde eine neue Möglichkeit eingeführt, Standardwerte für beliebige Parameter anzugeben.

Sehen Sie sich das Beispiel unten an:

function animalSentence(animals2="tigers", animals3="bears") {
  return `Lions and ${animals2} and ${animals3}! Oh my!`;
}
 
function animalSentence(animals2="tigers", animals3="bears") {
  return `Lions and ${animals2} and ${animals3}! Oh my!`;
}

After = für jeden Parameter gibt es einen Ausdruck, der den Standardwert angibt, wenn der Parameter nicht übergeben wird. Also, animalSentence() gibt „Löwen und Tiger und Bären! Oh mein Gott!“ zurück, animalSentence(„elephants“) gibt „Löwen und Elefanten und Bären! Oh mein Gott!“ zurück, animalSentence(„elephants“, „whales“) gibt „Löwen“ zurück und Elefanten und Wale! Oh mein Gott!“

Ein paar Details, die Sie zu den Standardwerten der Parameter beachten sollten:

Im Gegensatz zu Python werden Ausdrücke für Parameter-Standardwerte beim Aufruf der Funktion von links nach rechts ausgewertet, was bedeutet, dass der Ausdruck Parameter verwenden kann, die zuvor ausgefüllt wurden. Wir könnten zum Beispiel die obige Funktion etwas interessanter gestalten:

function animalSentenceFancy(animals2="tigers",
  animals3=(animals2 == "bears") &#63; "sealions" : "bears")
{
 return `Lions and ${animals2} and ${animals3}! Oh my!`;
}

 
function animalSentenceFancy(animals2="tigers",
  animals3=(animals2 == "bears") &#63; "sealions" : "bears")
{
 return `Lions and ${animals2} and ${animals3}! Oh my!`;
}

Dann gibt animalSentenceFancy("bears") „Löwen und Bären und Seelöwen. Oh mein Gott!“ zurück.

Die Übergabe von undefiniert entspricht der Nichtübergabe des Parameters. Deshalb gibt animalSentence(undefined, „unicorns“) „Löwen und Tiger und Einhörner! Oh mein Gott!“ zurück.
Wenn für einen Parameter kein Standardwert angegeben ist, ist der Standardwert des Parameters undefiniert, also

function myFunc(a=42, b) {...}
 
function myFunc(a=42, b) {...}

entspricht

function myFunc(a=42, b=undefined) {...}
 
function myFunc(a=42, b=undefined) {...}

Argumente verwerfen

Mit Rest-Parametern und Standardwerten für Parameter können wir das Argumentobjekt vollständig weglassen und so unseren Code besser lesbar machen. Darüber hinaus erschwert das Argumentobjekt die Optimierung von JavaScript.

Hoffentlich können die beiden oben genannten neuen Funktionen Argumente vollständig ersetzen. Vermeiden Sie als ersten Schritt die Verwendung von Argumentobjekten, wenn Sie Restparameter oder Parameterstandardwerte verwenden. Wenn das Argumentobjekt nicht sofort oder nie entfernt wird, ist es am besten, die Verwendung von Restparametern oder Parametern zu vermeiden Argumente Objekt.
Kompatibilität

Firefox 15 oder höher unterstützt diese beiden neuen Funktionen bereits. Darüber hinaus gibt es jedoch keine weitere Browserunterstützung. Vor kurzem hat die experimentelle Umgebung von V8 Unterstützung für Rest-Parameter hinzugefügt, und es gibt ein Problem mit Parameter-Standardwerten. JSC hat auch einige Probleme mit Rest-Parametern und Parameter-Standardwerten angesprochen.

Beide Compiler, Babel und Traceur, unterstützen bereits Parameter-Standardwerte, sodass Sie diese problemlos verwenden können.
Fazit

Obwohl diese beiden neuen Funktionen technisch gesehen kein neues Verhalten für Funktionen einführen, können sie einige Funktionsdeklarationen aussagekräftiger und lesbarer machen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn