【问题标题】:javascript function only returns undefinedjavascript函数只返回未定义
【发布时间】:2021-04-15 00:25:41
【问题描述】:

下面的javascript函数只返回undefined

function digital_root(n) {
  var x = String(n).split('');
  if (x.length > 1) {
    sum = x.reduce((accumulator, value) => parseInt(value) + accumulator, 0);
    digital_root(sum);
  } else {
    console.log(x);
    return x;
  }
}

但是在节点中运行时它会打印正确的值。那么为什么返回 undefined 呢?

> digital_root(12)
[ '3' ]
undefined

如果我取出console.log(x) 语句,函数仍然返回未定义

> digital_root(12)
undefined

【问题讨论】:

  • if true 分支中的 return 语句在哪里?
  • @MarianTheisen 你是对的,这就是问题所在。我没有意识到我也需要一个退货声明。

标签: javascript


【解决方案1】:

您的函数第一次运行时会进入if 块,在该块中它会再次使用参数digital_root(3) 调用自身。

现在首先处理这个“内部”调用,这次进入else 块,在那里发生console.log(x) 调用,然后return ['3'] 显式将该值返回到外部函数调用,因此返回值不会显示在控制台上。

内部调用返回值后,外部函数终止,因为没有什么可做的,所以外部函数永远不会返回任何东西。

只要没有明确的return 语句,函数就会有一个默认返回值undefined

【讨论】:

  • 如果我取出console.log(x) 语句,该函数仍然只返回未定义。但是,我知道应该返回x,因为它可以打印。还是我误解了一些基本的东西?
【解决方案2】:

我想通了。我需要在递归调用中包含return

完整的代码应该是这样的

function digital_root(n) {
  var x = String(n).split('');
  if (x.length > 1) {
    sum = x.reduce((accumulator, value) => parseInt(value) + accumulator, 0);
    return digital_root(sum);
  } else {
    console.log(x);
    return x;
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 2021-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2018-09-22
    相关资源
    最近更新 更多