【问题标题】:How do I change the value of a global variable inside of a function如何更改函数内部的全局变量的值
【发布时间】:2012-06-03 16:30:52
【问题描述】:

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

【问题讨论】:

    标签: javascript


    【解决方案1】:

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

    您可以通过使用var 在本地声明它来覆盖此行为,但如果您不使用var,那么如果该变量已被全局声明,则函数中使用的变量名称将是全局的。

    这就是为什么始终使用var 显式声明变量被认为是最佳做法的原因。因为如果你忘记了它,你可能会不小心开始弄乱全局变量。这是一个容易犯的错误。但在您的情况下,这会转而成为您问题的简单答案。

    【讨论】:

    • 这对我不起作用:country = 'foo' $.ajax({ url: '/some-endpoint', success: function(data) { country = data.country; } } ); console.log(country) // 输出 'foo'
    • @MarkSimpson - 它不起作用的原因是因为在您的示例中,console.log 立即运行,但 ajax 成功函数仅在稍后 ajax 调用实际返回时运行回复。这是关于 ajax 异步特性的一个基本点:闭包函数中的代码不会与其周围的代码按顺序运行。在学习事件驱动代码时,这一点很重要。
    • 在这种情况下让console.log更准确的方法是将它放在ajax成功函数中。
    • 我的另一个绝妙见解:仔细检查变量名的拼写和大小写。很容易错过像 sessionId 与 sessionID 这样简单的东西。
    • 我对这些有同样的问题。不过终于明白了,谢谢@Spudley!
    【解决方案2】:
    var a = 10;
    
    myFunction();
    
    function myFunction(){
       a = 20;
    }
    
    alert("Value of 'a' outside the function " + a); //outputs 20
    

    【讨论】:

    • 感谢这个很棒的简单示例。这样做的逻辑让我深思熟虑。刚刚习惯了 4d 思维。
    • @NullPoiиteя,但为什么要添加这个:var global = "Global Variable"; function click(){ global = "Hello World!"; };控制台.log(全局);返回(
      ); } 在 react js 中,global 没有改成 Hello World ?
    【解决方案3】:

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

    在 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,它们也会影响变量的范围 (Language Specification)

    【讨论】:

    • +1 用于描述全局和本地声明的变量之间的名称冲突以及如何访问它。
    • @yunzen,但是为什么要添加这个: var global = "Global Variable"; function click(){ global = "Hello World!"; };控制台.log(全局);返回(
      );在 react js 中,global 没有改为 Hello World ?
    【解决方案4】:
    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,您可以在函数内修改全局变量的值。

    【讨论】:

    • 这是我可以更改角度组件中的全局变量值的唯一方法!!!
    【解决方案5】:
    <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;
    【解决方案6】:

    一个简单的方法是使用 var

    var apple = null;
    const some_func =()=>{
          apple = 25
    }
    some_func()
    console.log(apple)
    

    【讨论】:

    • 在使用异步功能并等待设置值时不起作用。
    猜你喜欢
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2022-08-02
    • 2019-02-10
    相关资源
    最近更新 更多