我已经在线查看了在函数中更改变量但仍然无效。
我正在尝试更改函数中的全局变量。具有数字的对象彼此相乘。该函数将使用不同的全局变量多次。所以不要直接使用那里的名字。
这里是代码
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以未定义的形式出现。有人可以解释,谢谢
答案 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);
答案 3 :(得分:0)
嗯,你有一些事情要发生在这里:
首先,当我运行您的代码时,我收到引用错误,因为未定义homeTeamOppW
。你有一个错字。
其次,你永远不会真正更新ans
;它通过价值传递。所以它永远不会从0改变。
话虽如此,当我运行您的代码时(将homeTeamOppW
更改为homeTeamoppw
),它会打印0
这就是我所期望的。
如果您更改函数以返回@Mathletics显示并修复拼写错误的值,我认为它可以满足您的需求。或者,您可以直接在函数末尾重新分配ans
。
答案 4 :(得分:0)
该函数将拥有自己的副本(函数的本地副本),并且实际上不会修改全局变量的内容。您可以尝试分配函数体内函数返回的任何值,而不是将ans作为参数传递。
由于