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?

L105
quelle
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
Paul
quelle
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')
Jack
quelle
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.

Bryan Oakley
quelle