Javascript 这段代码有什么问题?

Javascript 这段代码有什么问题?,javascript,Javascript,试图找出这段代码的错误 //Code to return the sum of all values in an array var x = [ 1,2,3,4,5 ]; //Function to return sum of values in an array function sum(arr) { var sum = 0; for (i=1; i < arr.length; i++) { sum = sum + x[i]; } re

试图找出这段代码的错误

 //Code to return the sum of all values in an array
 var x = [ 1,2,3,4,5 ]; 

 //Function to return sum of values in an array
 function sum(arr) {

   var sum = 0;

   for (i=1; i < arr.length; i++) {
     sum = sum + x[i];
   }

   return sum;
 }
//返回数组中所有值之和的代码
var x=[1,2,3,4,5];
//函数返回数组中的值之和
函数和(arr){
var总和=0;
对于(i=1;i

sum(x)
的值是多少?

这里有几个问题,有些问题比其他问题更糟

首先,您应该将i作为变量来处理,
i=0
->
var i=0

然后你需要在0而不是1开始for循环(var i=1
->
for)(var i=0
javascript中的数组(以及几乎所有其他语言)是0索引的。这意味着第一项是
arrayName[0]
而不是
arrayName[1]

然后,您访问数组中的值时出错。您需要使用
arr[i]
而不是
x[i]
。您希望访问传递给函数的值,而不是之前创建的实际数组

第8行可以使用
+=
缩短,并且缺少分号

//Code to return the sum of all values in an array
var x = [1, 2, 3, 4, 5];

//Function to return sum of values in an array
function sum(arr) {
    var sum = 0;
    for (var i = 0; i < arr.length; i++) {
        sum += arr[i];
    }
    return sum;
}
console.log(sum(x)); //15 -- it works! (1+2+3+4+5=15)
//返回数组中所有值之和的代码
var x=[1,2,3,4,5];
//函数返回数组中的值之和
函数和(arr){
var总和=0;
对于(变量i=0;i
正如@user6188402提到的,
i
必须从0开始

原因如下:

var x=[1,2,3,4,5];
创建一个索引从0开始的数组,因此:

x[0] = 1
x[1] = 2
x[2] = 3
x[3] = 4
x[4] = 5

如果你从1开始做
sum=sum+x[i];
,答案将是
14
,而不是
15

,正如其他人所说,问题是数组和编程中的大多数其他东西都是零索引的

我可以建议另一种风格的选择吗

 var x = [ 1,2,3,4,5 ]; 

 //Function to return sum of values in an array
 var sum = function (arr) {
   return arr.reduce(function(a,b){return a+b;})
 }

 console.log(sum(x));
不过,在这一点上,函数只是一行代码,并不真正值得包装在函数中


i
必须从索引0开始如果您想让sum()用于多个数组,您可能打算添加arr[i]而不是x[i]。请注意,ES6语法(当您准备就绪时)也可以正常工作:
让sum=x.reduce((p,c)=>p+c);
只是为了好玩:
sum=arr=>eval(arr.join('+'))
I仍在学习爱ES6…对我来说还是有点神秘…我对lamda很好,因为某种原因缺少单词函数返回
reduce
的结果更简单。你是对的,我认为forEach更老了,reduce与IE不兼容。但两者都需要IE9,所以不妨使用更多的应用程序我更新了我的答案。