我一直在研究递归函数,并且开始或多或少地理解它们。当我遇到这个问题时,我正在参加一个免费的代码训练营挑战,但我不明白它。 for 循环内的递归函数:
function steamroller(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
//If (i)th element is an array
if (Array.isArray(arr[i])) {
newArr = newArr.concat(steamroller(arr[i]));
console.log(newArr);
} else {
newArr.push(arr[i]);
}
}
return newArr;
}
steamroller([1, [2],[3, [[4]]]]);
//returns [1, 2, 3, 4]
我很难理解的那句话是:
newArr = newArr.concat(steamroller(arr[i]));
在那条线上,newArr
连接到什么?该函数在 .concat 方法内部再次调用,对吗?但是 for 循环会发生什么呢? concat 方法内部的函数调用是否强制循环退出?
这里有一个JSFiddle https://jsfiddle.net/Chirpizard/owgp0vcd/,我有每个newArr
登录到控制台,但我什至无法遵循它。该数组的构建方式如下:
[1, 2]
[4]
[3, 4]
[1, 2, 3, 4] //Final
Thanks.