Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个递归javascript函数返回未定义的值?_Javascript_Function_Recursion_Undefined - Fatal编程技术网

为什么这个递归javascript函数返回未定义的值?

为什么这个递归javascript函数返回未定义的值?,javascript,function,recursion,undefined,Javascript,Function,Recursion,Undefined,在下面的递归函数中,我希望函数在末尾返回“arrized”,但它返回未定义的。当执行进入if块时,代码不应该返回吗?感谢您对此的评论 function myFun(i){ if(i===0){return ('arrived');} i = i - 1; myFun(i); } 如果我按如下方式更改代码,那么它将返回“arrized”,但仍然不知道上面的代码为什么不返回“arrized” 第一个函数不返回值,因为所有代码路径都必须返回值。在第一行之后,没有return语

在下面的递归函数中,我希望函数在末尾返回
“arrized”
,但它返回
未定义的
。当执行进入
if
块时,代码不应该返回吗?感谢您对此的评论

function myFun(i){
    if(i===0){return ('arrived');}
    i = i - 1;
    myFun(i);
}
如果我按如下方式更改代码,那么它将返回
“arrized”
,但仍然不知道上面的代码为什么不返回
“arrized”


第一个函数不返回值,因为所有代码路径都必须返回值。在第一行之后,没有
return
语句。当使用
0
作为参数调用时,它只返回一个值。

递归是一种函数遗产,因此以函数样式编写程序将产生最佳结果

这意味着避免像这样的事情

  • 不返回值的命令式语句、
    if
    switch
  • 突变或变量重新分配,如
    i=i+1
const myFun=i=>
i==0
? “到达”
:我的乐趣(i-1)
console.log(myFun(10))

//“到达”
@anthony,我被发送到参数中如果你有一个函数
foo
,它只调用一个函数
bar
,返回一个值
“bar”
,如果
foo
没有
return
语句,你会期望
foo
返回调用
bar
的结果吗<代码>函数foo(){bar()}函数bar(){返回“bar”}foo()递归函数也一样。你的例子完全有道理。非常感谢。如果调用函数
myFun(5)
,那么它最终会到达
myFun(0)
,此时它应该返回
“到达”
,对吗?因此,我的意思是,如果我调用
myFun(5)
,它与
myFun(0)
有什么不同,在
myFun(0)
中,我直接使用参数
0
调用函数?在这种情况下,您有6个嵌套(递归)调用。第六次调用是在i==0的情况下完成的,是的,它将向第五次调用的上下文返回一个字符串。然后该值被“丢弃”,因为在第5次(以及第4次和第3次etc)调用发生的地方,即第3行,没有
return
语句。现在我明白了,非常好的解释,谢谢。
function myFun(i){
    if(i===0){return ('arrived');}
    i = i - 1;
    return myFun(i);
}