我正在遍历JS练习代码(用于面试),我发现教练已经在函数参数中使用/分配了空数组
function walk(collection, result = []) {
collection.forEach(item => {
if(isTheItem(item)) result.push(item);
else walk(item[0].children, result);
});
return result;
}
通常,上面的代码和下面的代码是否相等
function walk(collection) {
const result = []
collection.forEach(item => {
if(isTheItem(item)) result.push(item);
else walk(item[0].children, result);
});
return result;
}
即使从递归的角度来看?如果没有,有人可以解释一下两者之间的区别吗?
答案 0 :(得分:2)
上面的代码和下面的代码相等
否,因为在您的第二个代码中,walk
仅接受一个参数,并且每次调用walk
(无论是否递归)都将有一个新的result
。当前,您的第二个代码将仅输出集合中顶层的项目。
要修复第二个代码,您将必须接受第二个参数来传递result
,例如:
function walk(collection, result) {
if (!result) {
result = [];
}
collection.forEach(item => {
if(isTheItem(item)) result.push(item);
else walk(item[0].children, result);
});
return result;
}
答案 1 :(得分:1)
该语法基本上是一个占位符-如果没有提供参数作为函数参数,则默认情况下会分配一个空数组。