递归返回函数调用 - 理论返回语句

时间:2017-08-06 21:19:12

标签: javascript recursion

在以下递归函数中,请注意我们必须在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, []))

1 个答案:

答案 0 :(得分:2)

在JavaScript中,如果您未在函数中执行return语句,则返回值将为undefined

由于您想要返回一个值,因此需要return语句。

如果符合条件,那么您将获得要返回的值,因此return即可。

如果条件不满足,则需要递归调用函数并return结果。