Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung der Codefälle für die anonyme rekursive Implementierung in Javascript

Detaillierte Erläuterung der Codefälle für die anonyme rekursive Implementierung in Javascript

黄舟
黄舟Original
2017-05-26 10:01:571201Durchsuche

In diesem Artikel wird hauptsächlich der Beispielcode von Javascript zur Implementierung einer anonymen Rekursion vorgestellt und arguments.callee zur Implementierung einer anonymen Rekursion verwendet. Interessierte können mehr über

Rekursion ist eine gängige Programmiertechnik erfahren. Ich glaube, jeder kennt die Real-Name-Rekursion, aber was ist, wenn Sie eine anonyme Rekursion implementieren möchten? Wenn Sie beispielsweise eine anonyme rekursive Funktion zurückgeben oder eine anonyme rekursive Funktion definieren und direkt aufrufen möchten, wie sollten Sie das tun? In diesem Artikel wird die Implementierung erläutert.

Rekursion mit echtem Namen

Beginnen wir mit der Rekursion mit echtem Namen, indem wir das einfachste Beispiel für die Suche nach Fakultäten verwenden:

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * fact(n - 1);
 }
}
console.log(fact(5));

Die Rekursion erfordert einen Aufruf selbst, was trivial ist, wenn die Funktion einen Namen hat.

Verwenden Sie die Variable , um die Rekursion zu implementieren.

Die Funktion kann auch einer Variablen zugewiesen werden, aber um die Rekursion zu implementieren, ist der Funktionskörper immer noch darauf angewiesen this Variablenname:

var f = function(n) {
 if (n < 2) {
  return n;
 } else {
  return n * f(n - 1);
 }
}
console.log(f(5));

Es sollte gesagt werden, dass sich diese Methode nicht wesentlich von der vorherigen unterscheidet.

Anonyme Rekursion

Lassen Sie uns nun die Implementierung der anonymen Rekursion besprechen.

Erste Gedanken

Wenn Sie eine anonyme rekursive Funktion zurückgeben oder eine anonyme rekursive Funktion definieren und direkt aufrufen möchten:

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * ?(n - 1);
 }
})(5);

Wenn kein Name vorhanden ist, wissen wir nicht, was wir in das Fragezeichen im Code einfügen sollen, und können keine Rekursion bilden. Was sollen wir zu diesem Zeitpunkt tun? Zu diesem Zeitpunkt ist es notwendig, nach den Argumenten Objekt zu fragen.

Argumentobjekt

In einer Javascript-Funktion stellt das Argumentobjekt das Parameterobjekt dar, wenn es tatsächlich aufgerufen wird. In unserer rekursiven Funktion müssen wir die „formalen Parameter“ n eigentlich überhaupt nicht definieren:

function factNoParam() {
 if (arguments[0] < 2) {
  return arguments[0];
 } else {
  return arguments[0] * factNoParam(arguments[0] - 1);
 }
}
console.log(factNoParam(5));

Solange wir beim Aufruf die tatsächlichen Parameter übergeben, können wir Argumente[0] verwenden. Rufen Sie den tatsächlichen Wert dieses übergebenen Parameters ab.

Wenn es mehr Parameter gibt, können diese auch durch Argumente[1], Argumente[2] usw. abgerufen werden.

arguments.callee Attribute

Argumente können verwendet werden, um Parameter zu erhalten, aber die Argumente Das Objekt hat tatsächlich eine Eigenschaft namens callee. arguments.callee repräsentiert die Funktion selbst. Was bedeutet das? Tatsächlich können wir Fakten wie folgt schreiben:

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
}
console.log(fact(5));

Dann ist es immer noch rekursiv. Denn arguments.callee ist tatsächlich gleichbedeutend mit Tatsachen.

Hier sind wir also, mit Hilfe dieses Attributs ist es nicht schwierig, eine anonyme Rekursion zu implementieren, ändern Sie einfach ? in arguments.callee:

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
})(5);

Bei Bedarf, oder es kann als anonyme Rekursion zurückgegeben werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Codefälle für die anonyme rekursive Implementierung in Javascript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn