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