Maison > interface Web > js tutoriel > le corps du texte

Comment récursifier une fonction à la profondeur n en JavaScript ?

WBOY
Libérer: 2023-09-05 15:01:02
avant
1317 Les gens l'ont consulté

如何在 JavaScript 中将函数递归到深度 n ?

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.

Pourquoi devons-nous déréférencer les fonctions ?

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

Comment déréférencer une fonction ?

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".

Utilisez la méthode "Function.prototype.apply"

La méthode

"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>
Copier après la connexion

Utilisez la méthode « Function.prototype.call »

La méthode

"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>
Copier après la connexion

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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal