问题是,函数是否在再次调用该函数的行暂停,或者是否完全执行然后返回到该行(调用同一函数的行)。
我还有这个例子,它表明递归是以相反的方式发生的(我猜每个内部函数都保留对其外部函数的引用,并且执行以与正常顺序相反的方式发生)。
请尽可能详细说明。
function func(n) {
if(n > 0) func(n-1)
console.log(n)
}
func(10) // 1,2,3,4,5,6,7,8,9,10
// while I was expecting 10, 9, 8, 7, 6, 5, 4, 3, 2, 1
我建议使用 Chrome 中的调试器工具来跟踪代码执行。递归确实向后发生,因为它必须满足您的基本情况才能退出。每次它不满足您的基本情况时,当前运行的函数就会放入调用堆栈(在 JS 中)。在你的情况下func(n-1
被呼叫和之前func
被放入调用堆栈中。一旦满足您的基本情况,您的func
调用堆栈中的 s 开始继续运行(从剩余行 ->console.log
)。由于堆栈的本质是后进先出 (LIFO),因此函数会反向运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)