试图理解递归函数的类似堆栈的行为

aba*_*edo 5 javascript recursion function

我正在阅读有关MDN上的函数的文章,我到达了Recursive部分,但我不明白最后一部分讨论使用类似堆栈的行为.

一个例子是:

function foo(i) {
  if (i < 0)
    return;
  console.log('begin:' + i);
  foo(i - 1);
  console.log('end:' + i);
}
foo(3);

// Output:

// begin:3
// begin:2
// begin:1
// begin:0
// end:0
// end:1
// end:2
// end:3
Run Code Online (Sandbox Code Playgroud)

在该功能上,我了解何时显示begin日志,但是当显示end日志时我不知道.有人可以帮我解释一下吗?

jef*_*n24 3

所以基本上在每次调用 foo 时,它都会i-1保持函数打开,但它还没有返回。它继续下去,因此开始不断被调用,一旦达到 0,最后一个函数调用就会返回。一旦发生这种情况,其他 foo 调用也可以开始完成。他们将从最旧到最新完成。

您可以使用Philip Roberts的放大镜看到此效果的可视化。 这是您的示例的放大镜