在下面的递归函数中,我希望函数在结尾处返回"arrived"
,而是返回undefined
。当执行进入if
块时,代码应该返回?感谢您对此的评论。
function myFun(i){
if(i===0){return ('arrived');}
i = i - 1;
myFun(i);
}
如果我更改代码如下,那么它将返回"arrived"
,但仍然不知道为什么上述代码不会返回"arrived"
。
function myFun(i){
if(i===0){return ('arrived');}
i = i - 1;
return myFun(i);
}
答案 0 :(得分:7)
第一个函数不返回值,因为所有代码路径必须返回一个值。在第一行之后,没有return
语句。它仅在使用0
作为参数调用时返回值。
答案 1 :(得分:1)
递归是一种功能性遗产,因此以函数式编写程序将产生最佳结果。
这意味着要避免像
这样的事情for
,if
,switch
等i = i + 1
const myFun = i =>
i === 0
? "arrived"
: myFun (i - 1)
console.log (myFun (10))
// "arrived"

与语句不同,通知表达式计算为值。我们做了以下更改
function
声明function myFun (i) { ... }
已替换为函数表达式 myFun (i) => ...
if
语句已替换为三元表达式,例如condition ? ifTrue : ifFalse
i = i - 1; myFun(i)
已替换为表达式 myFun(i - 1)
注意,return
语句本身是一个副作用,在函数式JavaScript程序中几乎没用。
在这里继续其他答案,所有代码路径都必须返回一个值!以函数式编写程序的一个优点是,您不能编写一个不返回值的函数,也不能只用一个分支编写条件。
TL; DR:使用功能样式,您的问题自动消失