Javascript';这';Z组合器和其他递归函数中的覆盖

Javascript';这';Z组合器和其他递归函数中的覆盖,javascript,recursion,this,anonymous-function,Javascript,Recursion,This,Anonymous Function,背景: 如图所示,我有一个由Z-combinator实现的递归函数,因此它不使用参数。被调用方,因为它在即将推出的ES6中将被弃用 问题 到目前为止,Z-combinator和所有递归匿名函数的主要问题是,它们将de这个值更新到内部函数范围(在return子句中自返回),因此引用顶层的这个会丢失,我想通过所有的内部功能来维护它 有没有一种方法可以维护顶级this,而不将其作为附加函数参数传递,这是解决此问题的最明显的方法,但没有我想要的那么干净 编辑: 现在,我通过将顶部的this引用传递给Z-

背景:

如图所示,我有一个由Z-combinator实现的递归函数,因此它不使用
参数。被调用方
,因为它在即将推出的ES6中将被弃用

问题

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

有没有一种方法可以维护顶级
this
,而不将其作为附加函数参数传递,这是解决此问题的最明显的方法,但没有我想要的那么干净

编辑:

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

Co.Utilities.Z(this.createHTMLFromLOM)(this.LOM, this);
function createHTMLFromLOM(callee:any, LOM_section:LOM, self:any):void {
    /* Some other code. */
    return callee(LOM_section.children[widget], self);
}
在递归函数中,我通过如下方式传递top this值来返回相同的函数:

Co.Utilities.Z(this.createHTMLFromLOM)(this.LOM, this);
function createHTMLFromLOM(callee:any, LOM_section:LOM, self:any):void {
    /* Some other code. */
    return callee(LOM_section.children[widget], self);
}
这是我的Z-combinator定义:

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

谢谢

您可以执行以下操作:

var me=this


然后通过
me
作为Z组合器的参数。

谢谢你的回答,你说的是我现在是如何做到这一点的。我将更新这个问题,指出这一点。你有其他的方法吗?你能发布一个精确的代码样本而不是Z组合模式的链接吗?这样调试代码会更容易。您可以尝试
返回func.apply(null[f].concat([].slice.call(arguments,this))但我不确定这是否会有帮助/起作用。那不起作用:(好吧,我会接受你的答案为正确,并投票表决,因为它与我做的一样,仅供参考。谢谢你的时间。很抱歉我帮不上忙。:S