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.