为何JavaScript递归函数未返回预期值反而返回undefined?
为什么你的递归函数返回undefined?
这是个很典型的递归陷阱——你在递归调用的时候没有把内层函数的返回值传递回外层,导致最终整个函数调用没有任何有效的返回值,自然就返回undefined了。
咱们一步一步拆解原函数的执行过程,比如你调用myFun(2):
function myFun(i){ if(i===0){return ('arrived');} i = i - 1; myFun(i); // 这里的问题:调用了递归,但没返回它的结果 }
执行步骤:
- 调用
myFun(2):i不等于0,i变成1,然后调用myFun(1)——但这一行没有return,所以当myFun(1)执行完后,myFun(2)没有任何值可以返回,最终结果就是undefined。 - 进入
myFun(1):i不等于0,i变成0,调用myFun(0)——同样,这里也没return,所以myFun(1)也不会返回任何值给它的调用者(也就是myFun(2))。 - 进入
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):
myFun(2)调用myFun(1),并把myFun(1)的返回值作为自己的返回值。myFun(1)调用myFun(0),也把myFun(0)的返回值作为自己的返回值。myFun(0)返回'arrived',这个值一路传递回myFun(1)→myFun(2),最终最外层调用就拿到了'arrived'。
简单来说,递归函数每一层都需要把内层的结果“传递”出来,否则除了最内层的返回值,外层的调用都没有有效的返回内容,最终就会得到undefined。
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

