Dies zeigt eine funktionale Programmiertechnik namens currying . (verwandt auch zu Teilfunktionsanwendung )
Größer als >
benötigt normalerweise zwei Argumente (eins links und eins rechts). Dies ist eine Möglichkeit, einzeln zu füttern.
Es könnte einfacher sein zu sehen, was passiert, wenn Sie es inline aufrufen:
%Vor% Wie Sie im obigen Beispiel sehen können, wird 10
für den Parameter n
übergeben und dann wird 11
für den Parameter m
übergeben.
Die erste Anwendung, die 10
übergibt, gibt eine Funktion aus, die folgendermaßen aussieht:
Dies ist die erste Anwendung in der Teilapplikation.
Von dort aus ist es leicht zu sehen, wie die 11
übergeben wird, um das Endergebnis zu erhalten.
Also, um es zu brechen:
%Vor% m
ist 11
, die während des zweiten Aufrufs übergeben wurden.
Wenn Sie greaterThan(10)
aufrufen, wird eine neue Funktion wie folgt zurückgegeben:
, das dann als greaterThan10
gespeichert wird. Dies wird currying genannt.
greaterThan
ist eine Funktion, die als Ergebnis eine andere Funktion zurückgibt, m
ist ein Paraterer dieser zurückgegebenen Funktion. Also in deinem Code:
var greaterThan10 = function(m) { return m > 10; };
und
console.log(greaterThan10(11));
ist identisch mit console.log(11 > 10);
Wenn Sie die Funktion greaterThan
aufrufen, gibt sie eine andere Funktion, aber keine Anzahl float zurück. Die innere Funktion kennt n
, weil sie innerhalb der Funktion greaterThan
ist.
Da die Wrapper-Funktion eine andere Funktion zurückgibt, können Sie die zweite wie folgt aufrufen
%Vor% Das erste Argument 10
wird für die Wrapper-Funktion verwendet, aber das Ergebnis ist eine Funktion, so dass Sie Argumente für die innere Funktion sofort übergeben können.
Dies ist nur möglich, wenn Sie return function(){...}
Sie können etwas wie
ausprobieren %Vor%Tags und Links javascript higher-order-functions anonymous-function