Zwei Sätze von Klammern nach dem Funktionsaufruf


168

Ich habe nachgesehen , wie Filter in Angularjs funktionieren, und ich habe gesehen, dass wir zwei Sätze von Klammern senden müssen.

$filter('number')(number[, fractionSize])

Was bedeutet das und wie gehen wir mit JavaScript damit um?


7
Persönlich finde ich diese Syntax auch verwirrend / umständlich zu lesen. Sie können jedoch eine einfachere Syntax verwenden, um auf AngularJS-Filter zuzugreifen, wie hier beschrieben: stackoverflow.com/a/14303362/1418796
pkozlowski.opensource

Ich habe Angularjs als Beispiel genommen. Ich wollte wissen, wie ich damit umgehen soll, wenn ich selbst eine Funktion erstelle.
L105

4
Eigentlich heißt es "Currying". eine Programmiertechnik.
Sajuuk

Antworten:


331

Dies bedeutet, dass die erste Funktion ( $filter) eine andere Funktion zurückgibt und diese zurückgegebene Funktion dann sofort aufgerufen wird. Beispielsweise:

function add(x){
  return function(y){
    return x + y;
  };
}

var addTwo = add(2);

addTwo(4) === 6; // true
add(3)(4) === 7; // true

14
Mit ES6 Pfeilfunktionen können Sie es folgendermaßen schreiben:let add = (x) => (y) => x + y;
Guido

2
Nennen Sie mich einen Noob, aber bitte nehmen Sie sich Zeit, um zu erklären, wie die Unterfunktion den Wert vonx
Vikas Bansal

2
@VikasBansal Jedes Mal, wenn eine Funktion in Javascript aufgerufen wird, wird ein neuer Ausführungskontext erstellt, solange ein Verweis auf eine andere Funktion darin enthalten ist, bleibt der Ausführungskontext im Speicher.
Paul

11
Warum nicht einfach 2 Argumente wie übergeben add(x, y)? Wo ist der Vorteil, wenn man es so nennt?
Piotr Pawlik

1
Danke für diese Erklärung! passport.authenticate("local")(req, res, function(){
Hat

22

$filter('number') Gibt eine Funktion zurück, die zwei Argumente akzeptiert, wobei das erste erforderlich ist (eine Zahl) und das zweite optional ist (die Bruchgröße).

Es ist möglich, die zurückgegebene Funktion sofort aufzurufen:

$filter('number')('123')

Alternativ können Sie die zurückgegebene Funktion für die zukünftige Verwendung behalten:

var numberFilter = $filter('number');

numberFilter('123')

Dies; sieht komplex aus: export const ToursListQuery = gql` Abfrage ToursListQuery {Touren {ID Name}} `; Standard-Graphql exportieren (ToursListQuery, {Optionen: {pollInterval: 10000},}) (ToursList);
Stackdave

7

Es ist das gleiche wie das:

var func = $filter('number');
func(number[, fractionSize]);

Die $filter()Funktion gibt einen Zeiger auf eine andere Funktion zurück.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.