2017-08-06 64 views
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, [])) 
+0

这很清楚。一个不显式返回值的函数返回'undefined'。 – undefined

回答

2

在JavaScript中,如果你没有在一个函数执行return语句,则返回值将是undefined

既然你想返回一个值,你需要一个return语句。

如果条件满足,那么你有你想要返回的值,所以你return那个。

如果条件不符合,那么您需要递归调用该函数和return的结果。