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(不知道这是否是预期输出)。
您的函数只更改本地副本
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作为参数传递。
谢谢
好吧,你有几件事要做:
首先,当我运行代码时,会得到一个引用错误,因为没有定义
其次,您从未实际更新
也就是说,当我运行您的代码(将
如果您更改函数以返回@mathletics显示的值并修复拼写错误,我认为它可以满足您的需要。或者,您可以在函数结束时直接重新分配
如果您需要使用全局作用域并想传递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); |
小提琴