【问题标题】:Javascript recursion return undefined instead of value that set when hit the base caseJavascript递归返回未定义而不是遇到基本情况时设置的值
【发布时间】:2020-03-08 19:09:12
【问题描述】:

我尝试做一个可以达到基本情况并返回值的递归。我发现需要返回函数才能取回值但不完全确定为什么要以这种方式工作的解决方案?

// Test one
var tracker = 0;
var executeMe = function() {
   tracker++;
   if(tracker === 2) {
      return 'hits 2';
   }
   executeMe();
}
executeMe(); 
// return undefined ?

// Test two
var tracker = 0;
var executeMe = function() {
   tracker++;
   if(tracker === 2) {
      return 'hits 2';
   }
   return executeMe();
}
executeMe(); 
// return 'hits 2' ?

【问题讨论】:

  • return executeMe();
  • 在您的第一个示例中,当您到达树的底部时,您返回 hits 2。但是在上面的级别中,您不会从函数中返回值,因此executeMe() 的最终结果是undefined。在您的第二个示例中,您已经解决了这个问题。
  • 这是范围问题。您的控制台正在顶部范围内询问 executeMe() 的结果。 executeMe() 在其内部范围内,检索并丢弃这些值。结果是顶级范围(您正在跟踪的唯一值),不返回任何内容

标签: javascript recursion


【解决方案1】:

你大概可以想象是这样的(相同的缩进级别表示执行相同的函数调用:

calling executeMe() - with tracker 0

    Ignored If Statement
    calling nested executeMe() - with tracker 1

        Ignored If Statement
        calling nested executeMe() - with tracker 2
        Caught Base case with return 2

    Got return 2 but unused, returning Nothing (undefined)

Got return undefined but unused, returning Nothing (undefined)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 2016-07-25
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多