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()在其内部范围中,检索并丢弃这些值。结果是顶部范围(您正在跟踪其值的唯一范围),不返回任何内容