如何以递归方式(从内部)调用匿名函数?
(function(n) {
console.log(n=n-1);
// Want to call it recursively here without naming any function
})(20);
答案 0 :(得分:4)
只需命名即可。在这种情况下,无论如何都不能在括号外使用该函数 - 因此您不会使用它来污染命名空间。
(function recursive(n) {
console.log(n = n - 1);
if (n > 0) {
recursive(n); // just an example
}
})(20);
//recursive(20); // won't be able to call it here...
答案 1 :(得分:2)
从纯粹的理论角度来看,如果你真的想避免任何名称,你可以使用" Y组合器",这基本上是一种用自己调用函数的方法作为一个论点:
(function (le) {
return (function (f) {
return f(f);
}(function (f) {
return le(function (x) {
return f(f)(x);
});
}));
})(function (f) {
return function (n) {
document.write(n + " ");
if (n > 0) f(n - 1);
}
})(20);

这里有good explanation如何运作。
答案 2 :(得分:1)
如果不使用arguments.callee
,您将无法在没有名称的情况下调用它。但是,您可以这样命名函数:
(function repeat(n) {
console.log(n);
n = n - 1;
if (n > 0) repeat(n);
})(20);