在函数JS中更改全局变量

时间:2014-07-15 20:03:10

标签: javascript

我已经在线查看了在函数中更改变量但仍然无效。

我正在尝试更改函数中的全局变量。具有数字的对象彼此相乘。该函数将使用不同的全局变量多次。所以不要直接使用那里的名字。

这里是代码

var homeTeamOppw = {"last_gp": 0.2, "2nd_gp": 0.2, "3rd_gp": 0.8, "4th_gp": 0.4, "5th_gp": 0.8};
ans = 0;

function timesArrayitems(teamOpp, array){
  var num = 1;

  for(item in array){
    num = num * array[item];
  }

  teamOpp = num;
}

timesArrayitems(ans, homeTeamOppW);
console.log(ans);

ans以未定义的形式出现。有人可以解释,谢谢

5 个答案:

答案 0 :(得分:1)

您的功能仅更改本地副本teamOpp。您应该返回一个值并将ans设置为该值。

var homeTeamOppW = {"last_gp": 0.2, "2nd_gp": 0.2, "3rd_gp": 0.8, "4th_gp": 0.4, "5th_gp": 0.8};
ans = 0;

function timesArrayitems(array){ // note only one param
    var num = 1;

    for(item in array){

      num = num * array[item];
    }

    return num; // note return value

}

 ans = timesArrayitems(homeTeamOppW);
 console.log(ans);

答案 1 :(得分:1)

我认为你的意思是这样的:

var homeTeamOppw = {"last_gp": 0.2, "2nd_gp": 0.2, "3rd_gp": 0.8, "4th_gp": 0.4, "5th_gp": 0.8};
ans = 0;

function timesArrayitems(array){
  var num = 1.0;

  for(item in array){
    num = num * array[item];
  }
  return num;
}

ans = timesArrayitems(homeTeamOppw);
console.log(ans);

ans返回0.01024000004(不知道这是否是预期的输出)。

答案 2 :(得分:0)

如果你需要使用全局范围并希望传递ans,则ans需要是一个对象而不仅仅是一个变量,因为当你调用一个函数时,它将通过值传递,如果传递了对象,则传递给它参考

代码段:

var homeTeamOppw = {"last_gp": 0.2, "2nd_gp": 0.2, "3rd_gp": 0.8, "4th_gp": 0.4, "5th_gp": 0.8};
ans = {val:0};

function timesArrayitems(teamOpp, array){

var num = 1;

for(item in array){

    num = num * array[item];
}

    teamOpp.val = num;

}

 timesArrayitems(ans, homeTeamOppw);
 console.log(ans);

Fiddle

答案 3 :(得分:0)

嗯,你有一些事情要发生在这里:

首先,当我运行您的代码时,我收到引用错误,因为未定义homeTeamOppW。你有一个错字。

其次,你永远不会真正更新ans;它通过价值传递。所以它永远不会从0改变。

话虽如此,当我运行您的代码时(将homeTeamOppW更改为homeTeamoppw),它会打印0这就是我所期望的。

如果您更改函数以返回@Mathletics显示并修复拼写错误的值,我认为它可以满足您的需求。或者,您可以直接在函数末尾重新分配ans

答案 4 :(得分:0)

该函数将拥有自己的副本(函数的本地副本),并且实际上不会修改全局变量的内容。您可以尝试分配函数体内函数返回的任何值,而不是将ans作为参数传递。

由于