0
在下面的递归函数中,注意我们必须在printArr
之前使用return
。如果我们不使用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, []))
这很清楚。一个不显式返回值的函数返回'undefined'。 – undefined