TypeError:result.push不是函数

red*_*e47 0 javascript arrays

我有这两个函数,都生成一个从开始到结束的范围,其中start和end是整数.它们看起来像这样:

function range(start, end) {
  var result = [];
  for (var i = start; i <= end; i++) {
    result.push(i);
  }
  return result;
}

console.log(range(1,5));
//Expected output [1, 2, 3, 4, 5]

function functional_range(start, end) {
  function functional_range_helper(result, strt, nd) {
    if (strt > nd) return [];
    if (strt === nd) {
      return result;
    } else {
      return functional_range_helper(result.push(strt), strt + 1, nd);
    }
  }
  return functional_range_helper([], start, end);
}

console.log(functional_range(1,5));
//Expected output [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

第一个完美运行."TypeError:result.push不是函数"的第二个错误.我不明白为什么会发生这种情况,因为我将一个数组作为辅助函数的第一个参数传递,并使用辅助函数中的正确参数名来引用它.这是一个数组,为什么我会收到此错误?

Bry*_*yan 5

Array.prototype.push()返回新的长度,而不是数组.所以functional_range_helper(result.push(strt), strt + 1, nd)传递一个数字作为第一个参数而不是数组.