for循环不修改全局变量?

时间:2016-10-23 04:43:19

标签: javascript function variables for-loop scope

我写了一个for循环,由于某种原因拒绝修改全局变量。相反,它似乎创建了一个临时修改的局部变量。我的代码的精简版本如下。

var clubsArray = [obj, obj, obj];

//each obj contains a property of "goalsFor" which holds an integer

var madridTotalGoals = 0;
var barcaTotalGoals = 0;

function findTotalGoals(clubsArray, totalGoals) {

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

        totalGoals += clubsArray[i].goalsFor;
    }
}

findTotalGoals(clubsArray, barcaTotalGoals);

// this loops properly and does the math, but it never changes the value of barcaTotalGoals

在完整的代码中,有许多数组可以容纳&#34; club&#34;对象;每个都包含一个属性键&#34; goalsFor&#34;,它将一个整数作为值。还有很多&#34; totalGoals&#34;已全局声明的变量(这里指定了两个)。

有没有人知道为什么全局变量(例如barcaTotalGoals)在通过此函数时没有被修改?当我控制记录此循环的每个步骤时,数学运算正在进行,但结果未被存储。如果以前曾经问过我,我会道歉,但我已经彻底搜查了。

2 个答案:

答案 0 :(得分:0)

您尝试传递的变量由value而不是reference传递。所以它不会影响原始变量

您可以在for循环完成后分配值

function findTotalGoals(clubsArray, totalGoals) {

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

       totalGoals += clubsArray[i].goalsFor;
    }
    barcaTotalGoals = totalGoals;
}

答案 1 :(得分:0)

你是通过价值而不是通过参考来传递的...... 相反,你可以尝试这样:

clubsArray = [obj, obj, obj];

var totalGoals = {
    madrid: 0,
    barca: 0
}

function goalsByCountry(clubsArray, totalGoalsClub) {

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

        totalGoals[totalGoalsClub] += clubsArray[i].goalsFor;

    }

}

goalsByTeam(clubsArray, 'barca');
相关问题