【问题标题】:Why is my recursive JavaScript function not returning the string? [duplicate]为什么我的递归 JavaScript 函数不返回字符串? [复制]
【发布时间】:2017-05-18 06:34:39
【问题描述】:

以下函数返回未定义。为什么?

function noReturn(arg) {
  arg += " bar";
  if (arg.length <= 100) noReturn(arg); 
  else {console.log(arg); return arg;}
}

noReturn("foo");
//logs in the console: "foo bar bar bar bar....", but returns undefined

编辑:哎呀...当然!谢谢你的回答,他们都很完美。

【问题讨论】:

  • 我得到了如你所愿的答案,'function noReturn(arg) { arg += " bar"; if (arg.length
  • @SalindaKrish 感谢您的关注!但以下所有答案都是正确的。在您的回答中,您犯了与我相同的错误,您也忘记输入return noReturn(arg)。如果没有这个return 表达式,代码将无法工作。但是感谢您的帮助!
  • 不,我的朋友在那种情况下没有必要放一个 return 语句,它会再次递归调用该函数..它会在到达 else 语句时返回,这就是你得到预期结果的方式放...说实话,它对我有用
  • 'function noReturn(arg) { arg += "bar"; if (arg.length
  • @SalindaKrish 不,我的朋友,你错了;)你犯了和我一样的错误。尝试删除“console.log(arg)”命令。您可能被控制台记录 arg 欺骗了。证明:运行此语句:console.log(noReturn('sal')+'foo')。这将输出字符串"undefinedfoo",而不是sal bar bar bar....

标签: javascript function recursion return-value


【解决方案1】:

该函数不返回任何内容,因为您已将其定义为不为长度为

function noReturn(arg) {
  arg += " bar";
  if (arg.length <= 100) noReturn(arg); 
  //                    ^---- no return statement
  else {console.log(arg); return arg;}
}

如果您希望递归的结果向后传播,您必须添加return 语句。

【讨论】:

  • 正确。您必须将其视为嵌套链。第一次运行将调用另一个函数,但它永远不会返回以将其发回。
  • @tsutton if语句达到100个限制时会有return语句..是不是.??
  • @nem035 function noReturn(arg) { arg += " bar"; if (arg.length &lt;= 100) { noReturn(arg); } else { console.log(arg); return arg; } ,with noReturn("sal")..我执行了这个并得到了他打算采取的较早的结果,,, 那怎么可能呢,,,,作为萨尔酒吧酒吧...
  • @SalindaKrish 尝试在没有 console.log 部分的情况下运行该函数,也许您错误地将其作为返回值。
  • 是的,兄弟,非常感谢...哦,,,,我真的误会了。,...谢谢,.,.
【解决方案2】:

你必须做一个 return noReturn(arg); 。否则你只是递归调用它而不返回值。

【讨论】:

    【解决方案3】:

    因为您永远不会从初始函数调用返回。

    function noReturn(arg) {
      arg += " bar";
      if (arg.length <= 100) return noReturn(arg); 
      else {console.log(arg); return arg;}
    }
    
    noReturn('foo')
    

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签