更改函数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中的全局变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

PHP全局变量没有改变[重复]

从python中的异步函数修改全局变量[重复]

JS中的作用域以及全局变量的问题

js中的变量作用域问题

JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用

js中的全局变量和函数是作为window对象的属性和方法而存在