首页 > 解决方案 > 需要有人解释一个关于循环的简单问题

问题描述

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

我了解开始结果如何正常工作。
我只是无法理解“结束:”行背后的逻辑。
为什么它再次从零开始计数到 ​​3,这对我来说没有任何意义。
有人请向我解释代码我是新手

标签: javascriptfunctionloopsif-statement

解决方案


使用递归实际上不会导致函数循环,相反,它只是将当前调用添加到“堆栈”并继续到下一个函数。为简化起见,您可以将其视为每次调用递归时几乎相互嵌套的函数。由于您在每次记录之前进行递归调用,因此当前正在运行的函数本质上会暂停,并添加到堆栈中,直到下一个函数完成运行。这将一直持续到所有函数都到达该递归点并调用它,然后堆栈将以相反的顺序清空,完成每个函数直到堆栈为空。


推荐阅读