You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript递归中console.log的位置如何影响输出值的顺序?

递归调用后倒序输出的原因

你遇到的这个现象本质是由JavaScript调用栈的后进先出特性决定的,我们可以一步步拆解countDownRecursive(3)的完整执行流程理解:

首先贴出你给出的代码方便对照:

function countDownRecursive(n) {
   if (n == 0) {
     console.log('Hooray!')
     return
     } else {
       console.log(n)
       countDownRecursive(n-1)
       console.log(n)               
     }
}

执行过程完全按以下顺序走:

  • 第一步调用countDownRecursive(3):进入else分支,先执行第一个console.log(n)输出3,接下来调用countDownRecursive(2),此时当前函数剩下的逻辑(递归调用后的console.log(n))会被挂起,必须等countDownRecursive(2)完全执行完毕才会继续运行。
  • 进入countDownRecursive(2):先输出2,再调用countDownRecursive(1),同样挂起后续的输出逻辑,等countDownRecursive(1)执行完。
  • 进入countDownRecursive(1):先输出1,再调用countDownRecursive(0),挂起后续输出逻辑,等countDownRecursive(0)执行完。
  • 进入countDownRecursive(0):满足n==0的终止条件,输出Hooray!后return退出,回到上一层countDownRecursive(1)的挂起位置。
  • 继续执行countDownRecursive(1)剩下的逻辑:输出n的值1,执行完毕退出,回到countDownRecursive(2)的挂起位置。
  • 继续执行countDownRecursive(2)剩下的逻辑:输出n的值2,执行完毕退出,回到countDownRecursive(3)的挂起位置。
  • 继续执行countDownRecursive(3)剩下的逻辑:输出n的值3,整个函数执行完成。

所以递归调用之后的代码,执行顺序和递归调用的顺序是反过来的,自然就会呈现倒序输出的效果。

内容的提问来源于stack exchange,提问作者TheGuntz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:15:08