为什么这段代码会返回10而不是2?
var arrToSum = [2, 4, 10];
function sumArray(array) {
var result = 0;
for (var i = array[0]; i < array.length; i++) {
result += array[i];
}
return result;
}
sumArray(arrToSum);
// function returns 10
如果遵循循环逻辑,我会在将 2 添加到 结果 变量后结束,因为下一个 i 等于3,循环应该结束。请解释那里发生的事情。
答案 0 :(得分:2)
for循环中的工作原理:
for (var i = array[0]; i < array.length; i++) {
在循环中,这些是执行第一次迭代后的结果;
第一次迭代; i = 2
var i = array[0]; // i = 2;
result += array[i]; // result = 10;
array[i]
是array[2]
,即10。因此,result
为10。
第二次迭代; i = 3
array.length
是3,因为它有3个元素。条件i < array.length;
为false,代码中断循环,将结果返回为10.
答案 1 :(得分:1)
您从2开始(数组[0]的值),而不是从0开始。更改
for (var i = array[0]; i < array.length; i++) {
到
for (var i = 0; i < array.length; i++) {
答案 2 :(得分:0)
这就是为什么你应该熟悉javascript中的函数式编程。 map
,filter
,reduce
是您的朋友。特别是map
。
尽量避免使用常规循环,因为它们更容易出错。在您的情况下,您已经搞乱了计数器变量i
。
var sum = [2, 4, 10].reduce((a, b) => a + b, 0);