当我运行这个程序时,我最终得到了NaN;我很感激某些形式的解释,因为我很难过!我有一种奇怪的感觉,它必须对范围做一些事情......
https://jsfiddle.net/Smuggles/evj46a23/
var array = []
var range = function(start, end) {
for (var count = start; count <= end; count++) {
array.push(start);
start += 1;
}
console.log(array);
}
var sum = function() {
var result = 0
var arrayLength = array.length
for (var count = 0; count <= arrayLength; count++) {
result += array[count]
console.log(result);
}
}
console.log(sum(range(1, 10)));
答案 0 :(得分:1)
2件事:
for
函数中的sum
循环更改为< arrayLength
而不是<= arrayLength
。您正在处理以0索引开头的数组长度。sum
函数
var array = [];
var range = function(start, end) {
for (var count = start; count <= end; count++) {
array.push(start);
start += 1;
}
};
var sum = function() {
var result = 0;
var arrayLength = array.length;
for (var count = 0; count < arrayLength; count++) {
result += array[count];
}
return result;
};
console.log(sum(range(1, 10)));
&#13;
给定一个[4,5,6]
数组,索引如下:
0: 4
1: 5
2: 6
因此,当您使用数组的长度属性(3
)时,您将引用一个不存在的索引,该索引返回undefined
。它试图对undefined进行数学运算,这会导致NaN
。这就是您必须使用< arrayLength
。
这将有助于使这些功能更加纯净&#34;。而不是在函数之外维护状态(使用var array = []
),只需返回函数中的值:例如,请参阅以下内容:
function range(start, end) {
var arr = [];
for (var i = start; i <= end; i++) {
arr.push(i);
}
return arr;
}
function sumArray(array) {
return array.reduce(function(a, b) {
return a + b;
});
}
console.log(sumArray(range(1, 10)));
&#13;
每个函数都接受参数,并简单地返回结果。通过这种方式,您可以更多地使用这个功能&#34;。
答案 1 :(得分:0)
代码评论中的描述
var array = [];
var range = function(start, end) {
//simplified the loop to remove unnecessary variables
for (; start <= end; start++) {
array.push(start);
}
return array;
}
var sum = function() {
var result = 0;
// move length to scope of the loop
// change to < rather than <= due to zero index nature of arrays
for (var count = 0, length = array.length; count < length; count++) {
result += array[count];
}
// return the result from the function
return result;
}
// gets an array from 1-10
var arr = range(1, 10);
// print the array to the console
console.log(arr);
// print the sum to the console
console.log(sum(arr));