Schließungen und Curry sind häufig und relativ fortschrittliche Techniken, die in JavaScript verwendet werden. Alle funktionalen Programmiersprachen unterstützen diese beiden Konzepte. Wenn wir die funktionalen Programmiermerkmale in JavaScript vollständig nutzen möchten, müssen wir diese beiden Konzepte eingehalten haben. Schließungen sind tatsächlich eine unverzichtbare Grundlage für das Currying.
1. Das Konzept der Currying
In der Informatik ist Curry eine Technik, um eine Funktion zu verwandeln, die mehrere Parameter in eine Funktion akzeptiert, die einen einzelnen Parameter (der erste Parameter der ursprünglichen Funktion) akzeptiert, und eine neue Funktion zurückzugeben, die die verbleibenden Parameter akzeptiert und das Ergebnis zurückgibt. Die Technologie wurde nach dem Logiker Haskell Curry von Christopher Strachey benannt, obwohl sie von Moses Schnellel und Gottlob Frege erfunden wurde. Intuitiv behauptet Curry, dass "wenn Sie bestimmte Parameter beheben, eine Funktion erhalten, die die verbleibenden Parameter akzeptiert". Für eine Funktion yx mit zwei Variablen wird also eine Funktion 2x mit einer Variablen erhalten, wenn y = 2 festgelegt ist.
Currying bedeutet, bestimmte Parameter der Funktion im Voraus zu übergeben, um eine einfache Funktion zu erhalten. Vorpasste Parameter werden jedoch im Verschluss gespeichert, daher gibt es einige besondere Merkmale. Zum Beispiel:
var adder = function (num) {return function (y) {return num + y; }} var Inc = Adder (1); var dec = adder (-1)Die beiden Variablen Inc/Dec sind hier tatsächlich zwei neue Funktionen, die in Klammern aufgerufen werden können, z. B. die Verwendung im folgenden Beispiel:
// Inc, Dec, jetzt sind zwei neue Funktionen, die zum Übertragung des eingehenden Parameterwerts (+/-) 1print (Inc (99)); // 100print (Dec (101)); // 100print (Addierer (100) (2)); // 102print (Adder (2) (100)) übertragen werden.
2. Anwendung von Curry
Nach der Currying -Funktion können wir interessantere Code schreiben. In der Front-End-Entwicklung begegnen wir beispielsweise häufig auf diese Situation. Wenn die Anfrage vom Server zurückkehrt, müssen wir einige spezifische Seitenelemente aktualisieren, dh das Konzept der teilweisen Aktualisierung. Die Verwendung lokaler Aktualisierung ist sehr einfach, aber der Code ist leicht in ein Chaos zu schreiben. Und wenn Currying verwendet wird, kann es unseren Code erheblich verschönern und die Aufrechterhaltung erleichtern. Schauen wir uns ein Beispiel an:
// Update gibt eine Funktion zurück, mit der das ID -Attribut auf den Inhalt des Webelements der Elementfunktion aktualisiert werden kann (Element) {Rückgabefunktion (Text) {$ ("Div#"+item) .html (Text); }} // AJAX -Anforderung, wenn er erfolgreich ist, rufen Sie Parameter CallbackFunction -Aktualisierung (URL, Rückruf) {var params = {type: "echo", Daten: ""}; $ .ajax ({type: "post", url: url, cache: false, async: true, dataType: "json", data: params, // Aufruf Erfolg: Funktion (Daten, Status) {radback (data);}, // Aufruffehler Wenn ein Fehler in der Anfrage auftritt: Funktion (ERR) {allers ("Fehler:"+EREL); });} aktualisiert ("action.do?target=news", updesh ("Newspanel"); Aktualisierung ("action.do?target=Articles", update ("articlePanel"); refresh ("action.do?target=pictures", update ("picturePanel"); wobei die Aktualisierungsfunktion eine Instanz von Curry ist, die eine Funktion zurückgibt, dh: Update ("Newspanel") = Funktion (Text) {$ ("Div#Newspanel"). HTML (Text);}Da der Rückgabewert von Update ("Newspanel") eine Funktion ist und der erforderliche Parameter eine Zeichenfolge im Ajax Call of Refresh ist, werden die durch den Rückruf zurückgegebenen Daten an den Rückruf weitergegeben, wodurch die Aktualisierung des Zeitungsgremiums realisiert wird. Die Aktualisierung anderer Artikelpanel und Bilderpanel picturePanel werden auf diese Weise übernommen. Auf diese Weise werden die Lesbarkeit und Wartbarkeit des Codes verbessert.
Das obige ist der gesamte Inhalt dieses Artikels. Weitere Informationen zu JavaScript finden Sie unter: "JavaScript Reference Tutorial" und "JavaScript Code Style Guide". Ich hoffe auch, dass jeder wulin.com mehr unterstützt.