Javascript'这'在Z组合子和其他递归函数中重写
Javascript 'this' overwriting in Z combinator and every other recursive function
背景:
我有一个由Z-combinator实现的递归函数,如这里和这里所示,因此它没有使用arguments.callee
,因为它将在即将推出的ES6中被弃用。
问题
Z-combinator和我迄今为止看到的所有递归匿名函数的主要问题是,它们将de this
值更新到内部函数范围(在return
子句中返回的self),因此引用顶级的this
丢失了,我想通过所有内部函数来维护它。
有没有一种方法可以在不将顶级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);
}
这是我的Z-combinator定义:
function Z(func:any):any {
var f = function () {
return func.apply(null, [f].concat([].slice.apply(arguments)));
};
return f;
}
感谢
您可以执行以下操作:
var me = this;
以及将CCD_ 8作为自变量传递给Z组合器。
相关文章:
- 递归函数中断
- 将jQuery对象传递到setTimeout递归函数中
- 对象与递归函数的比较
- 循环内部的递归函数未按预期工作
- 递归函数返回不正确
- 递归函数编程困境
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 返回不会退出 javascript 中的递归函数
- jquery递归函数转换为非递归函数
- AngularJS,promise带有递归函数
- 如何停止此递归函数
- 如何将下面的递归函数转换为纯函数
- jQuery setTimeout ajax递归函数在即时消息程序中短时间后抛出错误
- Javascript递归函数引用了这一点
- 如何将这个递归函数转换为迭代函数
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 从javascript中的递归函数获取undefined
- 将递归函数转换为异步 CPS 实现 (javascript)
- Javascript'这'在Z组合子和其他递归函数中重写
- 递归函数会导致其他调用多次激发