2017-08-06 79 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的結果。