在以下递归函数中,请注意我们必须在return
之前使用printArr
。如果我们不使用return
,只执行printArr(num-1, [...arr, num]
,则递归函数的返回值为undefined
。
我在Google和StackOverflow上搜索了这个特定主题的解释,但找不到答案。有人可以解释为什么我们在对函数进行递归调用时需要使用return
,或者甚至将我引导到我可能错过的StackOverflow问题或博客文章。
我认为它可能与调用堆栈有关,但从概念上讲,我很难绕过它。
const printArr = (num, arr) => {
if (!num)
return arr
return printArr(num - 1, [...arr, num])
}
const printArr2 = (num, arr) => {
if (!num)
return arr
printArr(num - 1, [...arr, num])
}
// [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
console.log(printArr(10, []))
// undefined
console.log(printArr2(10, []))
答案 0 :(得分:2)
在JavaScript中,如果您未在函数中执行return
语句,则返回值将为undefined
。
由于您想要返回一个值,因此需要return
语句。
如果符合条件,那么您将获得要返回的值,因此return
即可。
如果条件不满足,则需要递归调用函数并return
结果。