嗨,我是JavaScript的新手,但我不明白递归函数在分配给变量时是如何工作的。下面的代码应该只有两个输出,但它有 3 个输出。
function capitalizeFirst(array) {
if (array.length === 1) {
return [array[0][0].toUpperCase() + array[0].substr(1)];
}
const res = capitalizeFirst(array.slice(0, -1));
console.log(res);
return res;
}
console.log(capitalizeFirst(['car', 'taco', 'banana']));
正如我认为的那样:首先大写First(array.slice(0,-1));将作为递归函数并将['Car']作为结果返回给res,然后控制台.log(res)打印结果,然后返回语句返回res函数,因此最终控制台.log(capitalizeFirst(['car', 'taco', 'banana'])); 结果应该返回 ['car']。所以在控制台屏幕中,我应该得到两个输出,但我得到三个为什么?
TLDR:递归函数将数组的第一个元素输出为大写字,等于数组的长度 - 1 并输出此结果。总输出等于数组长度。
数组的长度为 3,在基本情况下将返回一个数组。因此,res 将在递归函数内输出 2 次,在外部输出一次。
如果你有一个刚[Car]
的数组,那么递归函数将返回[Car]
该数组将被输出。
如果你有一个[car, taco]
数组,它将首先通过递归函数,然后缩小到[Car]
,由于这是基本情况,将返回[Car]
。这意味着在递归函数中,res =[Car]
。既然你有console.log(res)
和return res
,[Car]
将在递归函数内输出,然后在外部输出。
在数组长度为 3 的场景中,它将在[Car]
内输出两次,因为递归函数会一直持续到长度为 1(这意味着它将两次击中console.log
)。最后,当 res 返回时,它将被外部console.log
输出[Car]
。