Javascript 'this' überschreibt im Z-Kombinator und jeder anderen rekursiven Funktion

Hintergrund:

Ich habe eine rekursive Funktion implementiert von aZ-Kombinator wie gezeigtHier undHier so macht es keinen gebrauch vonarguments.callee da es in naher Zukunft veraltet sein wirdES6.

Problem

Das Hauptproblem mit derZ-Kombinator und alle rekursiven anonymen Funktionen, die ich bisher gesehen habe, sind, dass sie de aktualisierenthis Wert für den inneren Funktionsumfang (der selbst zurückgegebene amreturn Klausel), so dass diethis das verweist auf die oberste Ebene ist verloren, und ich möchte es durch alle inneren Funktionen beibehalten.

Gibt es eine Möglichkeit, das oberste Niveau zu halten?this ohne es als zusätzliches Funktionsargument zu übergeben, was ist der naheliegendste Weg, um dieses Problem zu beseitigen, aber es ist nicht so sauber, wie ich es möchte?

BEARBEITEN:

Im Moment löse ich das Problem, indem ich die Spitze passierethis Verweis auf dieZ-Kombinator so was:

Co.Utilities.Z(this.createHTMLFromLOM)(this.LOM, this);

In der rekursiven Funktion gebe ich die gleiche Funktion zurück, indem ich den oberen Wert wie folgt übergebe:

function createHTMLFromLOM(callee:any, LOM_section:LOM, self:any):void {
    /* Some other code. */
    return callee(LOM_section.children[widget], self);
}

Das ist meinZ-Kombinator Definition:

function Z(func:any):any {
        var f = function () {
            return func.apply(null, [f].concat([].slice.apply(arguments)));
        };
         return f;
    }

Vielen Dank

Antworten auf die Frage(1)

Ihre Antwort auf die Frage