我知道如何使用这种语法(function(){})();
自行运行脚本,请注意我的示例,没有为该anon函数指定名称。问题是,如何使用unamed函数进行递归函数?
(function(){
if(i < 3){
// how to call it self without function name?
}
})();
我总是给anon函数一个名字,并在递归函数中调用它自己。但是这一次我想知道是否有可能在没有名字的情况下自称。
答案 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组合器中。参见演示:
无论如何,正如菲利克斯所说,唯一的另一种解决方案是使用现在已弃用的arguments.callee
。为什么不指出你的功能?它速度快,调试更容易。