有人可以帮助我理解以下代码的输出吗?

时间:2019-12-28 18:41:40

标签: javascript

我已经尝试过,但是每次我得到不同的奇怪输出时。理想情况下,它应该打印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);

3 个答案:

答案 0 :(得分:3)

要了解当前输出,请先逐步执行功能。这有助于我将其写出并跟踪值。

  1. iteration0

  2. 开始
  3. 它开始for循环

  4. 此时
  5. i0

  6. 它已记录到控制台。

  7. 再次调用
  8. foo,其值为1

  9. iteration仍然小于5

  10. 一个新的for循环开始。 (第2步)

  11. i0,这是一个全新的循环,因为它位于foo

  12. 的新实例中

在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)