Heim  >  Artikel  >  Web-Frontend  >  Wie kann ich eine Funktion in JavaScript auf Tiefe n rekursieren?

Wie kann ich eine Funktion in JavaScript auf Tiefe n rekursieren?

WBOY
WBOYnach vorne
2023-09-05 15:01:021254Durchsuche

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

In JavaScript gilt eine Funktion als „curried“, wenn sie einen oder mehrere Parameter annimmt und eine neue Funktion zurückgibt, die die übrigen Parameter annimmt. Currying ist eine leistungsstarke Technik, mit der aus vorhandenen Funktionen neue Funktionen oder „Curry“-Funktionen der Tiefe n erstellt werden können. Warum müssen wir Funktionen dereferenzieren?

Es gibt mehrere Gründe, warum Sie eine bestimmte Funktion

aufheben

möchten. Zum Beispiel möchten Sie vielleicht -

    Verwenden Sie Curry-Funktionen in Kontexten, die nicht-curry-Funktionen erfordern
  • Konvertieren Sie Curry-Funktionen in ihre nicht-curry-Form, damit sie leichter zu lesen oder zu debuggen sind
  • Optimieren Sie die Leistung der Curryfunktion
  • Wie dereferenziere ich eine Funktion?

Es gibt zwei Möglichkeiten

, eine Funktion zu curryen

-

    Die erste Methode besteht darin, die Methode „Function.prototype.apply“ zu verwenden.
  • Die zweite Methode besteht darin, die Methode „Function.prototype.call“ zu verwenden.
  • Verwenden Sie die Methode „Function.prototype.apply“
Mit der Methode „Function.prototype.apply“ können Funktionen der Tiefe n gespeichert werden. Dazu müssen Sie einfach den „this“-Wert und das Parameter-Array an die

„apply“

-Methode übergeben. Zum Beispiel -

<!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>
Verwenden Sie die Methode „Function.prototype.call“ Die Methode "Function.prototype.call" kann auch verwendet werden, um eine Funktion bis zur Tiefe n aufzuheben. Die „call“-Methode ähnelt der „apply“

-Methode, aber Sie übergeben den

„this“

-Wert und die Argumente als einzelne Argumente und nicht als Array an die

“call“ i>-Methode. Zum Beispiel -

<!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>
Im obigen Beispiel haben wir die Methode "call" verwendet, um die Funktion "curriedAdd" zu curryen. Wie Sie sehen können, ist die Methode "call"

etwas ausführlicher als die Methode

"apply", hat aber den gleichen Effekt. Welche Vorteile bietet die Verwendung der Methode „Function.prototype.apply“? Die Verwendung der Methode „Function.prototype.apply“ zum Dereferenzieren einer Funktion hat mehrere Vorteile -

Die Methode „Apply“ ist schneller als die Methode „Call“.

Die Methode „Apply“ wird weiter unterstützt als die Methode „Call“.
  • Die Methode „Anwenden“ ist prägnanter als die Methode „Anruf“.
  • Zusammenfassend ist Currying eine leistungsstarke Technik, die verwendet werden kann, um neue Funktionen aus vorhandenen Funktionen zu erstellen oder Funktionen der Tiefe n zu „curryen“.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Funktion in JavaScript auf Tiefe n rekursieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen