JavaScript:递归匿名函数?

141

假设我有一个基本的递归函数:

function recur(data) {
    data = data+1;
    var nothing = function() {
        recur(data);
    }
    nothing();
}

如果我有一个匿名函数,我该怎么做呢?...

(function(data){
    data = data+1;
    var nothing = function() {
        //Something here that calls the function?
    }
    nothing();
})();

我希望有一种方法可以调用调用当前函数的函数... 我曾经在某个地方看到过脚本(我现在记不起来了)可以告诉您被调用的函数的名称,但我现在无法回想起任何与此相关的信息。


1
@thenduks:和使用匿名函数的原因一样。只是有时候需要使用递归。 - poke
5
很遗憾arguments.callee存在,而这个函数并没有做任何有用的事情。我正在查找Y组合子,该东西永远不会变得有用... - Kobi
1
是的,正如Kobi链接的那样,使用固定点组合器(例如Y)来进行匿名递归函数而无需arguments.callee。 - steamer25
1
请参考http://w3future.com/weblog/stories/2002/02/22/javascriptYCombinator.html,了解JS中Y组合子的示例。 - steamer25
这是由Y-Combinator在函数式语言中完成的。有关详细说明,请查看此链接:[https://dev59.com/qFoU5IYBdhLWcg3wzZA1#41412648]。 - Redu
21个回答

-1

这种方法可能不适用于所有情况,但是您可以使用arguments.callee来引用当前函数。

因此,阶乘可以这样完成:

var fac = function(x) { 
    if (x == 1) return x;
    else return x * arguments.callee(x-1);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接