没有名称的递归匿名函数

时间:2014-06-29 07:26:43

标签: javascript

我知道如何使用这种语法(function(){})();自行运行脚本,请注意我的示例,没有为该anon函数指定名称。问题是,如何使用unamed函数进行递归函数?

(function(){
    if(i < 3){
        // how to call it self without function name?       
    }
})();

我总是给anon函数一个名字,并在递归函数中调用它自己。但是这一次我想知道是否有可能在没有名字的情况下自称。

1 个答案:

答案 0 :(得分:0)

我不喜欢亚历山大的解决方案,只是因为你要两次定义这个功能。您可以编写Y组合子本身而不是编写Y组合子的实例:

function y(f) {
    return function () {
        return f(y(f)).apply(this, arguments);
    };
}

然后您的匿名函数变为:

y(function (f) {
    return function (i) {
        console.log(i);
        if (i < 3) return f(i + 1);
        else return i;
    };
})(0);

唯一的区别是你现在已经将递归逻辑移动到Y组合器中。参见演示:

http://jsfiddle.net/d4w4a/

无论如何,正如菲利克斯所说,唯一的另一种解决方案是使用现在已弃用的arguments.callee。为什么不指出你的功能?它速度快,调试更容易。

相关问题