0

背景:

我有一个由Z-combinator实现的递归函数如此处和此处所示,因此它没有用,因为它将在即将到来的ES6中弃用。arguments.callee

问题

Z-combinator和我到目前为止看到的所有递归匿名函数的主要问题是它们将 de 值更新到内部函数范围(在子句this中自行返回),因此引用顶层的我想通过所有内部功能来维护它。returnthis

有没有办法在不将其作为附加函数参数传递的情况下保持顶层this,这是摆脱这个问题的最明显方法,但不像我想要的那样干净?

编辑:

现在我通过将顶部this引用传递给Z-combinator来解决这个问题,如下所示:

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

在递归函数中,我通过传递顶部 this 值返回相同的函数,如下所示:

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

这是我的Z 组合器定义:

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

谢谢

4

1 回答 1

1

您可以执行以下操作:

var me = this;

并将 passme作为 Z Combinator 的参数。

于 2013-08-12T18:42:27.223 回答