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

为何JavaScript递归函数未返回预期值反而返回undefined?

为什么你的递归函数返回undefined?

这是个很典型的递归陷阱——你在递归调用的时候没有把内层函数的返回值传递回外层,导致最终整个函数调用没有任何有效的返回值,自然就返回undefined了。

咱们一步一步拆解原函数的执行过程,比如你调用myFun(2):

function myFun(i){ 
  if(i===0){return ('arrived');} 
  i = i - 1; 
  myFun(i); // 这里的问题:调用了递归,但没返回它的结果
}

执行步骤:

  1. 调用myFun(2):i不等于0,i变成1,然后调用myFun(1)——但这一行没有return,所以当myFun(1)执行完后,myFun(2)没有任何值可以返回,最终结果就是undefined。
  2. 进入myFun(1):i不等于0,i变成0,调用myFun(0)——同样,这里也没return,所以myFun(1)也不会返回任何值给它的调用者(也就是myFun(2))。
  3. 进入myFun(0):触发if条件,返回'arrived'——但这个值只回到了myFun(1)的调用点,而myFun(1)没有把这个值再返回出去,等于这个结果被“吃掉”了。

再看你修改后的函数,核心就是加了return:

function myFun(i){ 
  if(i===0){return ('arrived');} 
  i = i - 1; 
  return myFun(i); // 这里把递归调用的结果返回给上层
}

同样调用myFun(2):

  1. myFun(2)调用myFun(1),并把myFun(1)的返回值作为自己的返回值。
  2. myFun(1)调用myFun(0),也把myFun(0)的返回值作为自己的返回值。
  3. myFun(0)返回'arrived',这个值一路传递回myFun(1)→myFun(2),最终最外层调用就拿到了'arrived'。

简单来说,递归函数每一层都需要把内层的结果“传递”出来,否则除了最内层的返回值,外层的调用都没有有效的返回内容,最终就会得到undefined。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:05:59