Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个递归函数在做什么?_Javascript_Logging_Recursion - Fatal编程技术网

Javascript 这个递归函数在做什么?

Javascript 这个递归函数在做什么?,javascript,logging,recursion,Javascript,Logging,Recursion,我正在努力学习Javascript中的递归,写这篇文章是为了跟踪一个简单的递归函数 function count(num){ console.log(num + " top"); if (num===5) return console.log("It has ended."); count(num+1); console.log(num + " bottom"); } count(1); 以下是输出: 1顶 2顶 3顶 4顶 5顶 它已经结束了。 4底部 3底部 2底部 1底部 那么这里发

我正在努力学习Javascript中的递归,写这篇文章是为了跟踪一个简单的递归函数

function count(num){

console.log(num + " top");
if (num===5)
return console.log("It has ended.");
count(num+1);
console.log(num + " bottom");
}

count(1);
以下是输出:

1顶
2顶
3顶
4顶
5顶
它已经结束了。
4底部
3底部
2底部
1底部

那么这里发生了什么?我的基本条件有什么问题吗?日志是否显示了堆栈上的内容和从堆栈上取下的内容?我本以为函数会在“它已经结束”时停止,但我不知道为什么它不会停止


谢谢。

当您到达5时,return语句将启动。这意味着调用第五次
count
时,它不会再次调用
count
,然后它也不会再次调用
console.log

当它从第5次呼叫返回时,它将继续第4次呼叫


在第四次调用中,
count
4
count
是一个局部变量,对
count
的每次调用都有一个不同的变量),因此它在函数中运行最后的
控制台.log
语句,到达函数末尾并返回
未定义的
。第三个调用随后继续,依此类推。

关键是,如果函数没有在之前终止,则会打印顶部和底部。在顶部和底部以及返回之间进行调用

first   second  third   4th     5h call of function
1 top
        2 top
                3 top
                        4 top
                                5 top
                                It has ended.
                        4 bottom
                3 bottom
        2 bottom
1 bottom 

函数被多次调用…它只在“它已结束”时停止一次,但有四次没有停止。也许这会有所帮助:我想我可能需要阅读它。递归让我头疼,我基本上认为它是神奇的。谢谢。我快到了。调用
count(num+1)
时,整个函数将重复,这就是为什么我们在日志中看到递增的计数。然后满足条件并记录“它已结束”。但当满足条件后记录递减计数时会发生什么?也就是说,我想我还不明白你的最后两段。@rswerve-它从调用的函数返回,并继续运行上一个函数(这是同一个函数,只是参数不同)。