Javascript 'this' sobrescrevendo em Z combinator e todas as outras funções recursivas

Fundo:

Eu tenho uma função recursiva implementada por umCombinador Z como é mostradoAqui eAqui por isso não faz uso dearguments.callee uma vez que será preterido na próximaES6.

Questão

A principal questão com oCombinador Z e todas as funções anônimas recursivas que eu vi até agora é que elas atualizamthis valor para o escopo da função interna (o auto-retornado noreturn cláusula), de modo que othis que referencia o nível superior é perdido, e eu quero mantê-lo através de todas as funções internas.

Existe uma maneira de manter o nível superiorthis sem passá-lo como um argumento de função adicional, que é a maneira mais óbvia de se livrar desse problema, mas não é tão limpa quanto eu quero?

EDITAR:

Agora eu resolvo o problema passando o topothis referência aoCombinador Z como isso:

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

na função recursiva eu ​​retorno a mesma função passando o topo deste valor assim:

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

Este é meuCombinador Z definição:

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

obrigado

questionAnswers(1)

yourAnswerToTheQuestion