在函数参数中设置空数组

时间:2019-05-06 09:09:02

标签: javascript

我正在遍历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;
    }

即使从递归的角度来看?如果没有,有人可以解释一下两者之间的区别吗?

2 个答案:

答案 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)

该语法基本上是一个占位符-如果没有提供参数作为函数参数,则默认情况下会分配一个空数组。