Due serie di parentesi dopo la chiamata di funzione


168

Stavo guardando come funzionano i filtri in Angularjs e ho visto che abbiamo bisogno di inviare 2 set di parentesi.

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

Cosa significa e come lo gestiamo con JavaScript?


7
Personalmente trovo che questa sintassi sia confusa / scomoda da leggere. Ma è possibile utilizzare la sintassi più semplice per accedere AngularJS filtri come descritto qui: stackoverflow.com/a/14303362/1418796
pkozlowski.opensource

Ho preso angularjs come esempio. Volevo sapere come gestirlo se creo una funzione da solo.
L105,

4
In realtà si chiama "curry". una tecnica di programmazione.
Sajuuk,

Risposte:


331

Significa che la prima funzione ( $filter) restituisce un'altra funzione e quindi quella funzione restituita viene chiamata immediatamente. Per esempio:

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

var addTwo = add(2);

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

14
Con le funzioni della freccia ES6 puoi scriverlo nel modo seguente:let add = (x) => (y) => x + y;
guido,

2
Chiamami Noob, ma per favore risparmia il tuo tempo per spiegare come può la sub-funzione è in grado di contenere il valore dix
Vikas Bansal

2
@VikasBansal Ogni volta che una funzione viene chiamata in Javascript, viene creato un nuovo contesto di esecuzione, purché vi sia un riferimento a un'altra funzione al suo interno, tale contesto di esecuzione rimarrà in memoria.
Paul,

11
Perché non passare semplicemente 2 argomenti come add(x, y)? Dov'è il vantaggio di chiamarlo così?
Piotr Pawlik,

1
Grazie per questa spiegazione! Mi ha davvero aiutato a capire come funziona l'autenticazione passportjs:passport.authenticate("local")(req, res, function(){
tidydee,

22

$filter('number') restituisce una funzione che accetta due argomenti, il primo è richiesto (un numero) e il secondo è facoltativo (la dimensione della frazione).

È possibile chiamare immediatamente la funzione restituita:

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

In alternativa, è possibile conservare la funzione restituita per uso futuro:

var numberFilter = $filter('number');

numberFilter('123')

Questo; sembra complesso: export const toursListQuery = gql` query ToursListQuery {tours {nome id}} `; export default graphql (toursListQuery, {opzioni: {pollInterval: 10000},}) (ToursList);
stackdave,

7

È lo stesso di questo:

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

La $filter()funzione restituisce un puntatore a un'altra funzione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.