背景:
我有一个由Z-combinator实现的递归函数,如此处和此处所示,因此它没有用,因为它将在即将到来的ES6中弃用。arguments.callee
问题
Z-combinator和我到目前为止看到的所有递归匿名函数的主要问题是它们将 de 值更新到内部函数范围(在子句this
中自行返回),因此引用顶层的我想通过所有内部功能来维护它。return
this
有没有办法在不将其作为附加函数参数传递的情况下保持顶层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;
}
谢谢