求解释js递归

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

// begin:3
// begin:2
// begin:1
// begin:0
// end:0
// end:1
// end:2
// end:3

求帮忙解释这段代码的流程,本人太菜所以希望大神详细点。

阅读 6.9k
评论
    7 个回答
    • 2
    • 新人请关照

    第一次进入函数foo(3),此时的参数为3,假设为foo1()被推入执行栈
    首先 i不小于0,输出begin:3
    进入foo(i - 1),参数为3-1 = 2,假设为foo2()被推入执行栈
    i不小于0,输出begin:2
    进入foo(i - 1),参数为2-1 = 1,假设为foo3()被推入执行栈
    i不小于0,输出begin:1
    进入foo(i - 1),参数为1-1 = 0,假设为foo4()被推入执行栈
    i不小于0,输出begin:0
    进入foo(i - 1),参数为0-1 = -1,假设为foo5()被推入执行栈
    i小于0 return,执行栈弹出当前的函数foo5(),进入到上一个函数foo4(),继续执行未完成的代码
    输出end:0
    执行栈弹出当前的函数foo4(),进入到上一个函数foo3(),继续执行未完成的代码
    输出end:1
    执行栈弹出当前的函数foo3(),进入到上一个函数foo2(),继续执行未完成的代码
    输出end:2
    执行栈弹出当前的函数foo2(),进入到上一个函数foo1(),继续执行未完成的代码
    输出end:3
    执行栈弹出当前的函数foo1(),到此执行栈全部执行完毕

      相似问题
      推荐文章