这是功能,但执行时这只给了我一次。
(function(n, m) {
// body...
if (n <= m) {
console.log(n);
n++;
(n, m);
}
})(1, 10);
&#13;
答案 0 :(得分:2)
您无法递归调用匿名函数;你必须给它一个名字(在这种情况下它不再被视为匿名&#39;):
(function name(n, m) {
// body...
if (n <= m) {
console.log(n);
n++;
name(n, m);
}
})(1, 10);
&#13;
答案 1 :(得分:1)
您可以使用arguments.callee
返回被称为函数的定义
(function(n, m) {
// body...
if (n <= m) {
console.log(n);
n++;
arguments.callee(n, m);
}
})(1, 10);
&#13;
如果执行此操作,则会看到日志
(function(n, m) {
// body...
if (n <= m) {
console.log(n);
n++;
console.log(arguments.callee);
}
})(1, 10);
&#13;
arguments
是内置数组,就像对象不完全数组一样,由java脚本本身注入,它保存有关参数传递给函数的信息等等......检查this
答案 2 :(得分:0)
你没有循环。给函数和调用命名。
(function test(n,m) {
// body...
if (n<=m) {
console.log(n);
n++;
test(n,m);
}
})(1,10);
&#13;
答案 3 :(得分:0)
这是一个没有“循环”的匿名函数,并将数字n
显示为m
(function(n, m) {
Array.from({length:m}, (v,i) => console.log(i + n));
})(1, 10);
答案 4 :(得分:0)
只需使用while
(function(n, m) {
// body...
while (n <= m) {
console.log(n);
n++;
(n, m);
}
})(1, 10);
&#13;
答案 5 :(得分:0)
为什么你不想使用循环
(function(n, m) {
// body...
while (n <= m) {
console.log(n);
n++;
(n, m);
}
})(1, 10);
Loop
始终优于recursive function
1) - 当调用recursive function
时,该函数位于堆栈的顶部,所以如果recursive function
在某个时刻超过堆栈大小,它将给你一个错误,({ {1}}),为避免此运行时错误,请始终使用循环而不是Stack Overflow or Stack size exceeded