2017-02-12 4 views
5

Es war verwirrend für mich wirklich diese Syntax in Javascript zu lesen:Was bedeutet "... args" (drei Punkte) in einer Funktionsdefinition?

router.route('/:id') 
.put((...args) => controller.update(...args)) 
.get((...args) => controller.findById(...args)); 

Was hat ... args bedeuten?

+2

'...' wird der Spread-Operator genannt. – bejado

+2

Normalerweise bedeutet "... args" "beliebig viele Werte". Zum Beispiel könnten Sie "null" oder "1,2,3,4" übergeben - es wäre egal und die Methode ist schlau genug, um damit umzugehen. – Tigger

+1

Es ist die neue Syntax in ES6 eingeführt. Bitte lesen Sie die Dokumentation hier https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/rest_parameters – Diode

Antwort

2

Mit Bezug (...args) =>, ...args ist ein rest parameter. Es muss immer der letzte Eintrag in der Parameterliste sein und es wird ein Array zugewiesen, das alle Argumente enthält, die keinen vorherigen Parametern zugewiesen wurden.

Es ist im Grunde der Ersatz für die arguments object. Statt

function max() { 
    var values = Array.prototype.slice.call(arguments, 0); 
    // ... 
} 
max(1,2,3); 

Schreiben Sie

function max(...value) { 
    // ... 
} 
max(1,2,3); 

Da auch Pfeil Funktionen ein arguments Objekt haben nicht schreiben, das ist der einzige Weg, variadische (Pfeil) Funktionen zu erstellen.


Als controller.update(...args) finden What is the meaning of "foo(...arg)" (three dots in a function call)?.

8

Wesentlichen, was getan wird, ist dies:

.put((a, b, c) => controller.update(a, b, c)) 

Natürlich, was passiert, wenn wir vier Parameter werden soll, oder 5 oder 6? Wir wollen keine neue Version der Funktion für alle möglichen Parametermengen schreiben.

Die spread operator (...) ermöglicht es uns, eine variable Anzahl von Argumenten zu akzeptieren und sie in einem Array zu speichern. Wir verwenden dann die Ausbreitung Operator sie wieder auf die update Funktion zu übergeben:

.put((...args) => controller.update(...args)) 

Dies ist auf die update Funktion transparent ist, der sie als normale Argumente empfängt.

+1

['...' ist kein Operator] (http://stackoverflow.com/ Fragen/37151966/was-ist-Spread-Element-in-ECCMascript-Dokumentation-ist-es-gleich-Spread-Oper/37152508 # 37152508) und es hat nichts mit Verbreitung zu tun. –

Verwandte Themen