You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Javascript中array.length返回值翻倍,求和结果异常原因咨询

问题分析:数组求和结果翻倍的原因

我正在通过书籍学习JavaScript,书中一道练习要求编写两个函数:一个根据传入的两个数字生成数组,另一个对数组内所有数字求和。我的代码如下:

let beg = 1;
let end = 3;
array = [];
sumNum = 0;

function range(begg, endd) {
    for (let count = begg; count <= endd; count++) {
        array.push(count);
    }
    return array;
}

console.log(range(beg, end));

function sum(arrayy) {
    for (let i = 0; i <= arrayy.length - 1; i++) {
        sumNum = arrayy[i] + sumNum;
        console.log(sumNum);
        
    }
    console.log("\n")
    console.log(arrayy.length - 1);
    return sumNum / 2;
}

console.log(sum(range(beg, end)));

array2 = [1, 2, 3];
console.log("\n");
console.log(array2.length);

运行代码后,我发现数组求和结果始终是预期值的两倍,array.length返回值和循环执行次数也翻倍,以下是输出内容:

[ 1, 2, 3 ]
1
3
6
7
9
12


5
6


3

问题原因

  • 全局数组被重复填充:你定义的array是全局变量,第一次调用range(beg, end)时,数组被填充为[1,2,3];当执行sum(range(beg, end))时,第二次调用range会直接在已有数组的基础上继续添加元素,导致数组变成[1,2,3,1,2,3],长度变为6,所以你看到arrayy.length -1输出5。

  • 全局累加变量未重置:sumNum同样是全局变量,第一次循环求和后它的值是6;第二次求和时没有重置为0,而是在6的基础上继续累加新数组的元素,最终得到6+6=12,这就是你需要返回sumNum/2才能得到正确结果的原因。

修正方案

把array和sumNum改成函数内部的局部变量,每次调用函数时都会重新初始化,避免全局变量的复用问题:

let beg = 1;
let end = 3;

function range(begg, endd) {
    const array = []; // 局部变量,每次调用重新创建
    for (let count = begg; count <= endd; count++) {
        array.push(count);
    }
    return array;
}

console.log(range(beg, end));

function sum(arrayy) {
    let sumNum = 0; // 局部变量,每次调用重置为0
    for (let i = 0; i < arrayy.length; i++) { // 简化循环条件,无需减1
        sumNum += arrayy[i];
        console.log(sumNum);
    }
    console.log("\n");
    console.log(arrayy.length - 1);
    return sumNum;
}

console.log(sum(range(beg, end)));

const array2 = [1, 2, 3];
console.log("\n");
console.log(array2.length);

内容的提问来源于stack exchange,提问作者Mak Vinícius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:31:03