我已经尝试过,但是每次我得到不同的奇怪输出时。理想情况下,它应该打印0、1、2、3、4并退出循环,但不会发生。
function foo(iteration) {
if (iteration === 5) {
return;
}
for (let i = 0; i < 5; i++) {
console.log(i);
foo(iteration + 1);
}
}
foo(0);
答案 0 :(得分:3)
要了解当前输出,请先逐步执行功能。这有助于我将其写出并跟踪值。
iteration
从0
它开始for循环
i
是0
。
它已记录到控制台。
foo
,其值为1
iteration
仍然小于5
一个新的for循环开始。 (第2步)
i
是0
,这是一个全新的循环,因为它位于foo
在for循环的每次迭代中,您调用foo
,而当iteration
小于5
时,您将开始一个新的for循环。
这是一个功能如您所愿的示例:
function foo(iteration) {
while(iteration < 5) {
console.log(iteration)
iteration++
}
}
foo(0)
答案 1 :(得分:2)
您不需要使用递归和循环。只是循环本身会起作用。
for (let i = 0; i < 5; i++) {
console.log(i);
}
或者,只是递归:
function foo(i) {
if (i >= 5) return true;
console.log(i);
foo(i + 1);
}
foo(0);
您正在说的是: 当foo-iteration小于5时,console.log会运行五次,并启动五个新增的foo-iterations。这5个新的foo-iterations中的每一个都将独立进行console.log记录五次,并启动五个NEW递增的foo-iterations,依此类推,直到foo-iterations最终达到5。 / p>
答案 2 :(得分:1)
由于您已经在使用递归,因此不需要该循环。这样的事情应该起作用:
function foo(iteration) {
if (iteration < 5) {
console.log(iteration);
foo(iteration + 1);
}
}
foo(0)