【问题标题】:recursive anonymous function without name没有名字的递归匿名函数
【发布时间】:2014-06-29 07:26:43
【问题描述】:

我知道如何使用这种语法(function(){})(); 自行运行脚本,请注意我的示例,该匿名函数没有分配名称。问题是,我如何使用未命名函数创建递归函数?

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

我总是给匿名函数一个名字并在递归函数中调用它自己。但是这次我想知道是否可以不带名字地称呼自己。

【问题讨论】:

标签: javascript


【解决方案1】:

我不喜欢 Aleksandar 的解决方案,仅仅是因为您定义了两次函数。您可以编写 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。你为什么不直接命名你的函数呢?它速度快,而且更容易调试。

【讨论】:

    猜你喜欢
    • 2022-06-20
    • 2015-11-21
    • 2011-01-29
    • 2011-04-22
    • 2020-09-24
    • 1970-01-01
    • 2011-07-17
    • 2011-10-24
    • 2013-07-11
    相关资源
    最近更新 更多