JavaScript-Funktionen höherer Ordnung

7

kann mir jemand erklären, was im folgenden Code passiert. Die Funktion empfängt n als Parameter, also woher kommt die m ? Der ganze Code ist verwirrend .. wenn jemand das erklären kann?

%Vor%     
whatever 03.05.2015, 21:46
quelle

5 Antworten

7

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:

%Vor%

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%     
Davin Tryon 03.05.2015, 21:50
quelle
6

m ist 11 , die während des zweiten Aufrufs übergeben wurden.

Wenn Sie greaterThan(10) aufrufen, wird eine neue Funktion wie folgt zurückgegeben:

%Vor%

, das dann als greaterThan10 gespeichert wird. Dies wird currying genannt.

    
Mathletics 03.05.2015 21:50
quelle
2

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);

    
GSPdibbler 03.05.2015 21:52
quelle
2

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(){...}

haben

Sie können etwas wie

ausprobieren %Vor%     
Sergei Tsibulchenko 03.05.2015 22:52
quelle
1

Sie haben dort zwei Funktionen.

Die n kommt von der ersten Funktion.

Das m kommt von, wenn die zweite Funktion (die der Rückgabewert der ersten Funktion ist) aufgerufen wird.

%Vor%     
Quentin 03.05.2015 21:51
quelle