Javascript 无名称递归匿名函数

Javascript 无名称递归匿名函数,javascript,Javascript,我知道如何使用这个语法函数{};,自行运行脚本;,请注意我的示例,没有为anon函数指定名称。问题是,如何使用未指定的函数生成递归函数 (function(){ if(i < 3){ // how to call it self without function name? } })(); 我总是给一个非函数取一个名字,然后在递归函数中调用它自己。但是这一次我想知道是否有可能不用名字来调用它自己。我不喜欢Aleksandar的解决方案,因为你

我知道如何使用这个语法函数{};,自行运行脚本;,请注意我的示例,没有为anon函数指定名称。问题是,如何使用未指定的函数生成递归函数

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

我总是给一个非函数取一个名字,然后在递归函数中调用它自己。但是这一次我想知道是否有可能不用名字来调用它自己。

我不喜欢Aleksandar的解决方案,因为你要定义两次函数。您可以编写Y combinator本身,而不是编写Y combinator的实例:

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组合器中。请参见演示:


无论如何,正如Felix所说,唯一的另一种解决方案是使用arguments.callee,它现在已不推荐使用。你为什么不直接命名你的函数呢?它速度快,调试更容易。

没有其他推荐的方法。arguments.callee已被弃用。我想这就是函数可以有名称的原因:函数的可能重复