Javascript递归返回未定义的值,而不是在命中基本大小写时设置的值

Javascript递归返回未定义的值,而不是在命中基本大小写时设置的值,javascript,recursion,Javascript,Recursion,我尝试做一个递归,它可以命中基本情况并返回值。我发现解决方案需要返回函数才能返回值,但不确定为什么要这样做 // Test one var tracker = 0; var executeMe = function() { tracker++; if(tracker === 2) { return 'hits 2'; } executeMe(); } executeMe(); // return undefined ? // Test two var tr

我尝试做一个递归,它可以命中基本情况并返回值。我发现解决方案需要返回函数才能返回值,但不确定为什么要这样做

// 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' ?

您可能可以通过以下方式可视化is(相同的缩进级别表示执行相同的函数调用:

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)

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