这里发生了什么,我试图把我的头围绕递归和这个返回函数



function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup(5));

到目前为止,我明白,通过我设置countArray的函数,它决定调用自己,直到n = 0。在这一点上,它返回一个空数组给countArray但我只是不明白在这一点之后发生了什么给这个奇数排序的结果,我以为它只是把当前值N为0推到数组但显然没有…

有人知道这里发生了什么吗?

由于if条件,

0不会被压入数组。此时你的countArray被设置为[]。

当使用递归时,解释器需要一种能够理解这些函数的处理顺序的方法。

当你的脚本第一次运行时,解释器会创建一个全局执行上下文,并把它推送到执行堆栈。

执行完成后,引擎首先执行执行上下文位于堆栈顶部的函数。这里n=1。它把它压入数组,从堆栈中取出然后继续n=2,以此类推直到到达堆栈中的最后一个n=5

function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1);
console.log(n)
countArray.push(n);
return countArray;
}
}
console.log(countup(5));

最新更新