javascript - 需要有人解释一个关于循环的简单问题
问题描述
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,这对我来说没有任何意义。
有人请向我解释代码我是新手
解决方案
使用递归实际上不会导致函数循环,相反,它只是将当前调用添加到“堆栈”并继续到下一个函数。为简化起见,您可以将其视为每次调用递归时几乎相互嵌套的函数。由于您在每次记录之前进行递归调用,因此当前正在运行的函数本质上会暂停,并添加到堆栈中,直到下一个函数完成运行。这将一直持续到所有函数都到达该递归点并调用它,然后堆栈将以相反的顺序清空,完成每个函数直到堆栈为空。
推荐阅读
- java - 从 src/main/resources 读取会在命令行上给出 java.nio.file.InvalidPathException (但在 Eclipse 中工作正常)
- javascript - Vue 新手,卡在全局变量上
- javascript - Bootstrap CDN 不起作用并且在控制台中出现错误
- android-studio - Android Studio 不显示颤振项目结构
- python - 为什么 Cartpole 游戏的 DQN 奖励上升而损失不下降?
- javascript - 如何从“upload.js”中保存值以在其他 .js 中请求它
- python - Tensorflow:尝试迁移学习时出错:JPEG 数据或裁剪窗口无效
- python - 每次运行jupyter笔记本时都必须重新启动内核吗?
- python - 如何使用漂亮的汤创建带有标题和正文的字典
- node.js - 如何创建一个新的 Mongoose 文档,然后在保存前更新