Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For循环不遍历数组(JavaScript)_Javascript_Arrays_Function_For Loop - Fatal编程技术网

For循环不遍历数组(JavaScript)

For循环不遍历数组(JavaScript),javascript,arrays,function,for-loop,Javascript,Arrays,Function,For Loop,我通过使用for循环遍历数组来累加数组中的值,但它只返回第一个值。我收到的警报是2,而不是预期的2014 $(document).ready(function() { var array = [2, 2, 10, 0, 50, 1900, 25, 25]; function arraySum(arr) { var answer = 0; for (i = 0; i < array.length; i++) { answ

我通过使用for循环遍历数组来累加数组中的值,但它只返回第一个值。我收到的警报是2,而不是预期的2014

$(document).ready(function() {
    var array = [2, 2, 10, 0, 50, 1900, 25, 25];
    function arraySum(arr) {
        var answer = 0;
        for (i = 0; i < array.length; i++) {
            answer += array[i];            
        }
        return answer;
    }
    var response = arraySum(array);
    alert(response);
});
我做错了什么

JavaScript

$(document).ready(function() {
    var array = [2, 2, 10, 0, 50, 1900, 25, 25];
    function arraySum(arr) {
        var answer = 0;
        for (i = 0; i < array.length; i++) {
            answer += array[i];
            return answer;
        }
    }
    var response = arraySum(array);
    alert(response);
});
$(文档).ready(函数(){
var数组=[2,2,10,0,50,1900,25,25];
函数arraySum(arr){
var-answer=0;
对于(i=0;i
因为您将return语句放在循环中,所以当它第一次点击这个return语句(即2)时,它将带着值answer退出函数。你真正想要的是:

$(document).ready(function() {
    var array = [2, 2, 10, 0, 50, 1900, 25, 25];
    function arraySum(arr) {
        var answer = 0;
        for (var i = 0; i < array.length; i++) {
            answer += array[i];
            // DON'T return here
        }
        // Return HERE
        return answer;
    }
    var response = arraySum(array);
    alert(response);
});
$(文档).ready(函数(){
var数组=[2,2,10,0,50,1900,25,25];
函数arraySum(arr){
var-answer=0;
对于(var i=0;i
如果这不合理,请这样想:

你想执行一个动作八次,当它完成时,你想对结果做点什么。在这种情况下,您要添加八次数字,然后通知总数。不幸的是,如果您在循环中说return,那么它将在每个操作(添加)之后尝试“做一些事情”(return)。因为它试图在每一个动作之后返回,所以循环实际上在第一个动作之后中断,并且永远无法添加最后七个数字。如果您想观察这个过程的进展,实际上可以将警报放在您的return语句以前所在的位置,并观察它在每次迭代后被命中(因此收到八个警报)

作为旁注,您还应该用
var i
定义“i”,因为忘记“var”确实会影响作用域。我也在上面的代码中修复了这个错误。感谢Ryan提醒大家注意这一点。

<代码>$(文档).ready(函数()){
$(document).ready(function() {
var array = [2, 2, 10, 0, 50, 1900, 25, 25];
function arraySum(arr) {
    var answer = 0;
    for (i = 0; i < array.length; i++) {
        answer += array[i];           
    }
    return answer;
}
var response = arraySum(array);
alert(response);
});
var数组=[2,2,10,0,50,1900,25,25]; 函数arraySum(arr){ var-answer=0; 对于(i=0;i
您正在返回循环中的值。当循环第一次执行时,它将第一个数组值添加到answer,然后返回answer。此时,您的函数已完成运行

如果你移动返回答案;在循环下面,这将按预期工作

$(document).ready(function() {
    var array = [2, 2, 10, 0, 50, 1900, 25, 25];
    function arraySum(arr) {
        var answer = 0;
        for (i = 0; i < array.length; i++) {
            answer += array[i];            
        }
        return answer;
    }
    var response = arraySum(array);
    alert(response);
});
$(文档).ready(函数(){
var数组=[2,2,10,0,50,1900,25,25];
函数arraySum(arr){
var-answer=0;
对于(i=0;i
不确定这是否是某种测试:)

在FOR循环中有一个return语句。因此循环在计算后返回结果(0+数组[0])

$(文档).ready(函数(){
var数组=[2,2,10,0,50,1900,25,25];
函数arraySum(arr){
var-answer=0;
对于(i=0;i您可以使用以下命令:

$.each(array, function(index, value) {
    answer += value;
});
return answer;

由于jquery有一个内置的foreach函数。

除了大家已经说过的,当您将return移到循环外时,函数仍按其应该的方式运行,因此我将更改您在函数和循环中调用数组的方式

您的数组标题为“数组”。您在函数参数中将其调用为“arr”,因此我认为在函数中的后续for循环中,您也应该将数组调用标记为“arr”。无论采用哪种方法,我都能给出2014年的正确答案,但我认为在整个执行过程中保持函数数组变量的名称不变是最佳选择

$(document).ready(function() {
var array = [2, 2, 10, 0, 50, 1900, 25, 25];
function arraySum(arr) {
    var answer = 0;
    for (i = 0; i < arr.length; i++) {
        answer += arr[i];
    }
    return answer;
}
var response = arraySum(array);
console.log(response);
});
$(文档).ready(函数(){
var数组=[2,2,10,0,50,1900,25,25];
函数arraySum(arr){
var-answer=0;
对于(i=0;i
return
语句放在循环后面,而不是循环里面。此外,您应该在函数中使用参数名
arr
返回答案立即终止循环。将它移出循环。我的答案利用jquery foreach循环,消除了
VARI
声明的不足,以及标准
for
循环结构的不足,因为愚蠢的原因,它会让很多人绊倒。您已经加载了库,您还可以在可以使用的地方使用它。它也会对正在迭代的对象类型(无论是对象数组还是数组)产生缺陷。既然你已经做到了,你也应该定义
i
…这不是无关的,因为它可以打破循环结构来使用未定义的变量。JS是非常宽容的,但在某些情况下,这将是阻止良好打印输出的错误。虽然你绝对正确,这可能会导致不稳定的行为,但我觉得这是“无关的”,因为在这种特殊情况下,这不是询问者问题的原因。尽管如此,我已经修改了我的答案。