更改函数JS中的全局变量[重复]
Posted
技术标签:
【中文标题】更改函数JS中的全局变量[重复]【英文标题】:Changing a global variable in an function JS [duplicate] 【发布时间】:2014-09-06 04:14:48 【问题描述】:我在网上查看了有关更改函数中的变量的信息,但仍然不起作用。
我正在尝试更改函数中的全局变量。带有数字的对象相互相乘。该函数将多次使用不同的全局变量。所以不想直接使用那里的名字。
代码在这里
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);
答案显示为未定义。谁能解释一下,谢谢
【问题讨论】:
***.com/questions/13104494/… 您实际上并未在timesArrayitems()
中更新ans
,而是将其作为参考传递进来,它被用作local var teamOpp
范围内的function
。
【参考方案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);
【讨论】:
【参考方案2】:如果您需要使用全局范围并希望传递 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
【讨论】:
虽然这行得通,但它是解决 IMO 问题的一种奇怪方法。 我想解释一下为什么他的ans变量总是为零并且没有在外部范围内更新 对;您对问题的解释是正确的,我只是认为您的 solution 很奇怪,使用对象而不是返回值。这似乎是一个过于复杂的修复。【参考方案3】:嗯,这里有一些事情要做:
首先,当我运行您的代码时,我收到一个引用错误,因为 homeTeamOppW
未定义。你有一个错字。
第二个你从来没有真正更新过ans
;它按值传递。所以它永远不会从0改变。
话虽如此,当我运行您的代码(将 homeTeamOppW
更改为 homeTeamoppw
)时,它会打印出 0
,这是我所期望的。
如果您更改函数以返回 @Mathletics 显示的值并修复错字,我认为它可以满足您的需求。或者,您可以直接在函数末尾重新分配ans
。
【讨论】:
【参考方案4】:我认为你的意思是这样的:
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(不知道这是否是预期的输出)。
【讨论】:
这与我的回答有何不同? 不是。可能是在答案飞来的时候才提交的:-)【参考方案5】:该函数将拥有自己的副本(函数的本地副本),并且不会实际修改全局 var ans 的内容。您可以尝试分配函数在函数体内返回的任何值,而不是将 ans 作为参数传递。
谢谢
【讨论】:
以上是关于更改函数JS中的全局变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章