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!