2016-06-14 17 views
1
function greaterThan(n) { 
return function(m) { return m > n; }; 
} 
var greaterThan10 = greaterThan(10); 
console.log(greaterThan10(11)); 
// true 

Ich versuche, Funktionen höherer Ordnung zu verstehen. Ich verstehe, dass das Obige eine Funktion hat, die eine andere Funktion in ihm erzeugt. Ich verstehe auch, dass greaterThan10 speichert die Funktion: return function(m) { return m > n; };Sie können JavaScript-Funktionen haben, die andere Funktionen erstellen. Wie funktioniert das?

Ich verstehe nicht, wie dies in true resultiert? Gibt es keine Überschreitung der 11 übersteuert die 10 zuvor bestanden? Wie sind beide 10 & 11 gespeichert, bekomme ich das nicht? Dankes-

+1

'n = 10, m = 11' wenn du das einmal verstanden hast, sollte es Sinn machen. –

+1

Für Sie als Referenz wird dies als [Closure] (https://developer.mozilla.org/en/docs/Web/JavaScript/Closures) bezeichnet. – Rajesh

+1

Nun, speziell wird die Technik als [currying] bezeichnet (https://www.sitepoint.com/currying-in-functional-javascript/). –

Antwort

2

Aufruf var greaterThan10 = greaterThan(10); Ergebnisse in greaterThan10 mit dem folgenden Wert:

var greaterThan10 = function (m) { return m > 10; }; 

Daher Aufruf dieser Funktion mit 11 als Parameter (wie in Ihrem Beispiel) gibt 11 > 10, was wahr ist.

1

Übergibt die 11 nicht die 10 überschriebenen zuvor?

Nö, da greaterThan Funktion mit 10 einmal aufgerufen wird, so wird n mit bevölkert.

Danach greaterThan10 Funktion mit dem Wert genannt wird die auffüllt m (nicht n da greaterThan10 nimmt Parameter m) und n wird nicht berührt, da es den vorherigen Wert gespeichert nimmt in die Referenz greaterThan.

Beachten Sie, dass die Funktion greaterThan nicht erneut aufgerufen wird. Daher wird n nicht erneut aufgefüllt und daher bleibt der Wert gleich.