关于javascript:在函数JS中更改全局变量

Changing a global variable in an function JS

本问题已经有最佳答案,请猛点这里访问。

我在网上查过关于改变函数中变量的问题,但仍然不起作用。

我试图改变一个函数中的全局变量。一个有数字的物体相乘。函数将使用不同的全局变量多次。所以不要直接使用那里的名字。

这是密码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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的表现是不死的。有人能解释一下吗?谢谢。


我想你的意思是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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.0102400000 4(不知道这是否是预期输出)。


您的函数只更改本地副本teamOpp。您应该返回一个值并将ans设置为该值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);


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

谢谢


好吧,你有几件事要做:

首先,当我运行代码时,会得到一个引用错误,因为没有定义homeTeamOppW。你打字错误。

其次,您从未实际更新ans;它是按值传递的。所以它永远不会从0更改。

也就是说,当我运行您的代码(将homeTeamOppW改为homeTeamOppW)时,它会打印0,这是我所期望的。

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


如果您需要使用全局作用域并想传递ans,ans需要是一个对象而不仅仅是一个变量,因为当您调用一个函数时,它将通过值传递,如果传递了对象,那么它将通过引用传递。

代码片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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);

小提琴