我有这两个函数,都生成一个从开始到结束的范围,其中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不是函数"的第二个错误.我不明白为什么会发生这种情况,因为我将一个数组作为辅助函数的第一个参数传递,并使用辅助函数中的正确参数名来引用它.这是一个数组,为什么我会收到此错误?
Array.prototype.push()返回新的长度,而不是数组.所以functional_range_helper(result.push(strt), strt + 1, nd)传递一个数字作为第一个参数而不是数组.