En JavaScript, une fonction est considérée comme "curry" si elle prend un ou plusieurs paramètres et renvoie une nouvelle fonction qui prend les paramètres restants. Le curry est une technique puissante qui peut être utilisée pour créer de nouvelles fonctions à partir de fonctions existantes, ou des "curry"fonctions de profondeur n.
Il existe plusieurs raisons pour lesquelles vous pourriez souhaiter désactiver une certaine fonction. Par exemple, vous voudrez peut-être -
Utilisez des fonctions au curry dans des contextes qui nécessitent des fonctions sans curry
Convertissez les fonctions curry en leur forme non curry, ce qui les rend plus faciles à lire ou à déboguer
Optimisez les performances de la fonction curry
Il existe deux façonsde curry une fonction -
La première méthode consiste à utiliser la méthode "Function.prototype.apply".
La deuxième méthode consiste à utiliser la méthode "Function.prototype.call".
"Function.prototype.apply"peut être utilisée pour stocker fonctions de profondeur n. Pour ce faire, vous devez simplement transmettre la valeur "this" et le tableau de paramètres à la méthode "apply". Par exemple -
<!doctype html> <html> <head> <title>Examples</title> </head> <body> <p>uncurry up to depth 2 using Function apply() method</p> <div id="result"></div> <script> function add(a, b) { return a + b; } function curriedAdd(a) { return function(b) { return a + b; } } // Uncurry the "curriedAdd" function up to depth 2: document.getElementById("result").innerHTML = curriedAdd.apply(null, [1]).apply(null, [2]); // 3 </script> </body> </html>
"Function.prototype.call" peut également être utilisée pour dérouler une fonction à la profondeur n. La méthode "call" est similaire à la méthode "apply", mais vous transmettez la valeur "this" et les arguments à la méthode "call" i> en tant qu'arguments individuels plutôt que sous forme de tableau. Par exemple -
<!doctype html> <html> <head> <title>Examples</title> </head> <body> <p> uncurry up to depth 2 using Function call() method</p> <div id="result"></div> <script> function add(a, b) { return a + b; } function curriedAdd(a) { return function(b) { return parseInt(a) + parseInt(b); } } // Uncurry the "curriedAdd" function up to depth 2: document.getElementById("result").innerHTML = curriedAdd.call(null, [1]).call(null, [2]); // 3 </script> </body> </html>
Dans l'exemple ci-dessus, nous avons utilisé la méthode "call" pour curry la fonction "curriedAdd". Comme vous pouvez le voir, la méthode "call" est légèrement plus verbeuse que la méthode "apply", mais elle a le même effet.
Quels sont les avantages d'utiliser la méthode « Function.prototype.apply » ?
Utiliser la méthode "Function.prototype.apply" pour déréférencer une fonction présente plusieurs avantages -
La méthode "apply" est plus rapide que la méthode "call".
La méthode "apply" est plus largement prise en charge que la méthode "call".
La méthode "apply" est plus concise que la méthode "call".
En résumé, le currying est une technique puissante qui peut être utilisée pour créer de nouvelles fonctions à partir de fonctions existantes, ou pour "curry" des fonctions de profondeur n.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!