Les fermetures et le curry sont des techniques courantes et relativement avancées utilisées en JavaScript. Tous les langages de programmation fonctionnelle prennent en charge ces deux concepts. Par conséquent, si nous voulons utiliser pleinement les caractéristiques de programmation fonctionnelle en JavaScript, nous devons avoir une compréhension approfondie de ces deux concepts. Les fermetures sont en fait une base indispensable pour le curry.
1. Le concept de curry
En informatique, Curry est une technique de transformation d'une fonction qui accepte plusieurs paramètres en une fonction qui accepte un seul paramètre (le premier paramètre de la fonction d'origine) et renvoyant une nouvelle fonction qui accepte les paramètres restants et renvoie le résultat. La technologie a été nommée d'après le logicien Haskell Curry par Christopher Strachey, bien qu'il ait été inventé par Moses Schnfinkel et Gottlob Frege. Intuitivement, Curry affirme que "si vous corrigez certains paramètres, vous obtiendrez une fonction qui accepte les paramètres restants". Ainsi, pour une fonction yx avec deux variables, si y = 2 est fixe, une fonction 2x avec une variable est obtenue.
Le curry signifie passer certains paramètres de la fonction à l'avance pour obtenir une fonction simple. Mais les paramètres pré-passés sont enregistrés dans la fermeture, il existe donc des fonctionnalités particulières. Par exemple:
var adder = function (num) {return function (y) {return num + y; }} var inc = additionneur (1); var dec = additionneur (-1)Les deux variables Inc / DEC ici sont en fait deux nouvelles fonctions, qui peuvent être appelées entre parenthèses, telles que l'utilisation dans l'exemple suivant:
// Inc, Dec est désormais deux nouvelles fonctions, qui sont utilisées pour transférer la valeur du paramètre entrant (+/-) 1Print (Inc (99)); // 100print (dec (101)); // 100Print (Adder (100) (2)); // 102print (Adder (2) (100)); //102
2. Application du curry
Selon la fonctionnalité de curry, nous pouvons écrire un code plus intéressant. Par exemple, dans le développement frontal, nous rencontrons souvent cette situation. Lorsque la demande revient du serveur, nous devons mettre à jour certains éléments de page spécifiques, c'est-à-dire le concept de rafraîchissement partiel. L'utilisation de rafraîchissement local est très simple, mais le code est facile à écrire dans un gâchis. Et si le curry est utilisé, il peut embellir considérablement notre code et le rendre plus facile à entretenir. Jetons un coup d'œil à un exemple:
// Update renvoie une fonction, qui peut définir l'attribut ID au contenu de l'élément Web de la fonction de fonction d'élément (élément) {return function (text) {$ ("div #" + item) .html (text); }} // Demande AJAX, lorsqu'il réussit, l'appel des paramètres CallbackFunction Refresh (URL, rappel) {var params = {type: "echo", data: ""}; $ .ajax ({type: "Post", URL: URL, cache: false, async: true, dataType: "json", data: params, // Call Success: function (data, status) {callback (data);}, // erreur d'appel lorsqu'une erreur se produit dans la demande: fonction (err) {alert ("error:" + err);} });} Refresh ("Action.do?Target=news", Update ("Newspanel")); refresh ("Action.do?target=Articles", Update ("ArticlePanel")); refresh ("Action.do?target=pictures", update (PicturePanel ")); Lorsque la fonction de mise à jour est une instance de Curry, qui renverra une fonction, c'est-à-dire: mise à jour ("journal") = fonction (texte) {$ ("div # Newspanel"). html (texte);}Étant donné que la valeur de retour de la mise à jour ("journal") est une fonction et que le paramètre requis est une chaîne, dans l'appel de rafraîchissement de l'Ajax, lorsque le succès, les données renvoyées par le rappel seront transmises au rappel, réalisant ainsi la rafraîchissement du groupe de journaux. Le rafraîchissement d'autres articles d'article ArticlePanel et Picul Picle PicturePanel sont tous adoptés de cette manière. De cette façon, la lisibilité et la maintenabilité du code sont améliorées.
Ce qui précède est l'intégralité du contenu de cet article. Pour plus d'informations sur JavaScript, vous pouvez consulter: "JavaScript Reference Tutorial" et "JavaScript Code Style Guide". J'espère également que tout le monde soutiendra davantage Wulin.com.