如何在函数内部更改全局变量的值


130

我正在使用JavaScript,并创建了一个全局变量。我在函数外部定义它,我想在函数内部更改全局变量值,然后在另一个函数中使用它,我该怎么做?

Answers:


147

只需引用函数内部的变量即可;没有魔法,只用它的名字。如果它是全局创建的,那么您将更新全局变量。

您可以通过使用局部声明此行为来覆盖此行为var,但如果不使用var,则如果已在全局范围内声明该变量,则该函数中使用的变量名称将是全局变量。

因此,始终使用显式声明变量被认为是最佳做法var。因为如果您忘记了它,则可能会意外地与全局对象混淆。这是一个容易犯的错误。但就您而言,这种转变可以轻松解决您的问题。


3
这对我不起作用:country ='foo'$ .ajax({url:'/ some-endpoint',success:function(data){country = data.country;}}); 的console.log(国家)//输出'富'
马克辛普森

41
@MarkSimpson-之所以不起作用,是因为在您的示例中,该代码console.log立即运行,但是ajax成功函数仅在ajax调用实际返回响应之后的某个时间运行。这是有关ajax异步特性的基本要点:闭包函数中的代码不会与周围的代码按顺序运行。在学习事件驱动的代码时,掌握这一点很重要。
Spudley

在这种情况下,使console.log更加准确的方法是将其放入ajax成功函数中。
DWils 2014年

我的另一个精采见解:仔细检查变量名的拼写和大小写。错过诸如sessionId vs sessionID之类的简单内容非常容易。
whitebeard

我在这些上有同样的问题。但终于明白了,谢谢@Spudley!
Yudhistira Bayu

62
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

alert("Value of 'a' outside the function " + a); //outputs 20

1
感谢这个很棒的简单示例。这样做的逻辑是尽我所能。只是习惯了4d思维。
Mikey3Strings '16

29

只需使用该变量的名称即可。

在JavaScript中,变量仅是函数的局部变量,如果它们是函数的参数,或者您通过var在变量名称前键入关键字显式地将其声明为局部变量,则该变量仅在函数中局部存在。

如果本地值的名称与全局值的名称相同,请使用window对象

看到这个jsfiddle

x = 1;
y = 2;
z = 3;

function a(y) {
  // y is local to the function, because it is a function parameter
  console.log('local y: should be 10:', y); // local y through function parameter
  y = 3; // will only overwrite local y, not 'global' y
  console.log('local y: should be 3:', y); // local y
  // global value could be accessed by referencing through window object
  console.log('global y: should be 2:', window.y) // global y, different from local y ()

  var x; // makes x a local variable
  x = 4; // only overwrites local x
  console.log('local x: should be 4:', x); // local x
  
  z = 5; // overwrites global z, because there is no local z
  console.log('local z: should be 5:', z); // local z, same as global
  console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local
}
a(10);
console.log('global x: should be 1:', x); // global x
console.log('global y: should be 2:', y); // global y
console.log('global z: should be 5:', z); // global z, overwritten in function a

编辑

在ES2015中,还有两个关键字constlet,它们也影响变量的范围(语言规范


1
+1,用于描述全局变量与本地声明的变量之间的名称冲突以及如何访问它。
gdbj

6
<script>
var x = 2; //X is global and value is 2.

function myFunction()
{
 x = 7; //x is local variable and value is 7.

}

myFunction();

alert(x); //x is gobal variable and the value is 7
</script>

只是不必var在函数内使用关键字,那么您不必处理document.getElementById("outside").value = x;
Ben Aubin 2015年

5
var a = 10;

myFunction(a);

function myFunction(a){
   window['a'] = 20; // or window.a
}

alert("Value of 'a' outside the function " + a); //outputs 20

使用 window ['variableName']window.variableName,您可以在函数内部修改全局变量的值。


这是我可以更改角度分量中全局变量值的唯一方法!
Padmaraj Bhat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.