2016-12-28 111 views
1

为什么此代码返回10而不是2?添加数组元素Javascript

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 

如果下面的循环逻辑,我会增加结果变量之后结束,因为下一个等于3和循环应该结束。请解释发生了什么。

+2

因为'i'从'2'运行到'2',所以只需将'arr [2]'('10')添加到' 0'。我不清楚你打算使用'var i = array [0];'。扩大一点:*“因为下一个'i'等于'3'”*是的,你只加了一个值,循环在一次迭代后停止,但是因为'i'从'2开始'你是添加'arr [2]',而不是'arr [0]'。顺便说一句,如果你想明白你的代码在做什么,设置一个断点,一步一步通过你的代码并检查变量。 –

+2

因为'array [2]'是10 –

回答

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

您是从2开始,而不是从0变化

for (var i = array[0]; i < array.length; i++) { 

for (var i = 0; i < array.length; i++) { 
0

([0]数组的值)这就是为什么你应该熟悉的JavaScript函数式编程。 mapfilterreduce是你的朋友。特别是map

尽量避免常规循环,因为它们更容易出错。在你的情况下,你已经搞砸了计数器变量i

var sum = [2, 4, 10].reduce((a, b) => a + b, 0);