Ich habe Folgendes ohne Erfolg versucht:
function a(args){
b(arguments);
}
function b(args){
// arguments are lost?
}
a(1,2,3);
In Funktion a kann ich das Argument-Schlüsselwort verwenden, um auf ein Array von Argumenten zuzugreifen. In Funktion b gehen diese verloren. Gibt es eine Möglichkeit, Argumente an eine andere Javascript-Funktion zu übergeben, wie ich es versuche?
javascript
Anders Nygaard
quelle
quelle
arguments
es sich nicht um ein Array handelt (sondern um ein Objekt, das eine Array-ähnliche Semantik implementiert ). Daher ist auf den ersten Blick nicht ganz klar, ob es auf die gleiche Weise wie ein tatsächliches Array verwendet werden kann.Antworten:
Verwenden Sie
.apply()
diese Option , um denselben Zugriff auf diearguments
Funktion zu habenb
:Sie können es hier testen .
quelle
var copy = [].slice.call(arguments); <remove what you want> myFunc.apply(this, copy);
apply
dies verwenden, kann dies den Umfang vonb
(wenn es sich beispielsweise um eine innere Funktion eines Objekts handelt)Spread-Operator
ECMAScript ES6 hat einen neuen Operator hinzugefügt, mit dem Sie dies praktischer tun können: ... Spread Operator .
Beispiel ohne Verwendung der
apply
Methode:Note Dieses Snippet gibt einen Syntaxfehler zurück, wenn Ihr Browser weiterhin ES5 verwendet.
Anmerkung des Herausgebers: Da das Snippet verwendet wird
console.log()
, müssen Sie die JS-Konsole Ihres Browsers öffnen, um das Ergebnis anzuzeigen. Es wird kein In-Page-Ergebnis angezeigt .Dieses Ergebnis wird angezeigt:
Kurz gesagt, der Spread-Operator kann für verschiedene Zwecke verwendet werden, wenn Sie Arrays verwenden. Er kann also auch für Funktionsargumente verwendet werden. Ein ähnliches Beispiel finden Sie in den offiziellen Dokumenten: Rest-Parameter
quelle
...args
in dera
Funktion. Sie können einfach eine Funktion ohne Argumenteb
...arguments
...args
alsa
Eingabe anzugeben , wenn Sie verschachtelte Funktionen haben.Die Erklärung , dass keiner der anderen Antworten liefern , ist , dass die ursprünglichen Argumente sind immer noch vorhanden, aber nicht in der ursprünglichen Position in dem
arguments
Objekt.Das
arguments
Objekt enthält ein Element für jeden Aktualparameter, der der Funktion zur Verfügung gestellt wird. Wenn Sie anrufena
versorgen Sie drei Argumente: die Zahlen1
,2
und,3
. Alsoarguments
enthält[1, 2, 3]
.Wenn Sie jedoch aufrufen
b
, übergeben Sie genau ein Argument:a
dasarguments
Objekt. Soarguments
enthält[[1, 2, 3]]
(dh ein Element, das ista
‚s -arguments
Objekt, das Objekte enthält , die ursprünglichen Argumente hata
).Wie @Nick gezeigt hat, können Sie
apply
ein festgelegtesarguments
Objekt im Aufruf bereitstellen .Folgendes führt zum gleichen Ergebnis:
Ist
apply
aber im allgemeinen Fall die richtige Lösung.quelle
this
zuapply
?Versuche dies
quelle