我有一个freeCodeCamp:的例子
function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup(5));
我不确定我说得对的部分是:
const countArray = countup(n - 1);
这是在调用函数countArray = countup(4)
吗?该函数在当前函数完成后执行?
调用函数
countArray = countup(4)
是。
当前任务完成后执行哪个?
否。countup(4)
的执行立即开始;停止";执行CCD_ 4。CCD_ 5只能在countup(4)
返回后恢复并将n
推送到countArray
(并返回数组(。
对countup
的调用与任何其他函数调用完全相同。没有任何拖延或特殊考虑,因为它在呼唤自己。
考虑这个";展开的";示例的版本:
function countup_a(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_b(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_b(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_c(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_c(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_d(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_d(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_e(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_e(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_f(n - 1);
countArray.push(n);
return countArray;
}
}
function countup_f(n) {
if (n < 1) {
return [];
} else {
const countArray = countup_g_would_go_here(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup_a(5));
在这里,没有任何函数调用自己,执行顺序也没有什么特别之处。在countup_a完成之前,它需要来自countup_b的答案,countup_c的答案等等……然后一旦countup_f返回一个值,countup_e就可以使用该值,等等……直到我们回到countup_a,它将其结果提供给console.log
。
您的示例中唯一的区别是,由于函数都有相同的代码,因此您不需要很多具有不同名称的函数,每次只需使用相同的函数即可。呼叫本身";堆叠";以完全相同的方式。
你调用的那一刻
const countArray = countup(n - 1);
另一个倒计时正在开始,与其他的倒计时平行。