【问题标题】:Using a global variable in JavaScript在 JavaScript 中使用全局变量
【发布时间】:2009-07-22 18:22:33
【问题描述】:

我该怎么做?

我的代码是这样的:

var number = null;

function playSong(artist, title, song, id)
{
    alert('old number was: ' + [number] + '');

    var number = '10';

    alert('' + [number] + '');
}

第一个警报总是返回 'old number was:' 而不是 10。它不应该在第二个函数调用的两个警报上都返回 10 吗?

【问题讨论】:

  • 该死的!感谢所有这么快的答案。
  • 为什么要写 alert('old number was: '+[number]+'');而不是警报('旧号码是:'+号码);因为它会警告一个包含一个项目的数组,而不是项目(数字)
  • 嗯不知道,但它有效。我认为它不会查找任何数组,因为我在右侧连接空白区域 + '';或许我不知道。

标签: javascript variables global-variables


【解决方案1】:

通过在设置 number = '10' 时使用 var,您每次都将 number 声明为局部变量。试试这个:

var number = null;

function playSong(artist, title, song, id)
{
    alert('old number was: ' + [number] + '');

    number = '10';

    alert('' + [number] + '');
}

【讨论】:

  • 你如何通过函数 playSong 访问该变量并获得值 10?
  • @johnsnails 该变量是在函数外部声明的,因此当分配 number=10 时,它实际上是引用了全局变量,但是如果我们在辅助函数中使用 var number = '10' 那么它将具有局部范围,我们不会在函数之外得到值 10。
【解决方案2】:

删除函数中number 前面的var。您正在通过

创建一个局部变量
var number = 10;

你只需要

number = 10;

【讨论】:

    【解决方案3】:

    问题是您在函数内部声明了一个名为number 的新变量。这个新变量隐藏了全局 number 变量,因此 number = 10 行只分配给这个新的局部变量。

    您需要从var number = 10 中删除var 关键字。

    【讨论】:

      【解决方案4】:

      就像在 C 中一样,您需要在函数/方法之外定义变量以使其成为全局变量。

      var number = 0;
      
      function playSong(artist,title,song,id)
      {
          alert('old number was: '+[number]+'');
          number = '10';
          alert(''+[number]+'');
      }
      

      【讨论】:

      • 在同一分钟内看到相同的答案令人欣慰。
      • 实际上,任何没有 'var' 的定义都将是一个全局变量,无论它是在哪里定义的。 Javascript 可能很可怕。
      【解决方案5】:

      让我详细解释一下。在 JavaScript 中声明全局变量和局部变量

      var firstNumber = 5; // Local variable
      secondNumber = 10; // Global variable or window object
      

      当你的程序是这样的时候

      var number = 1;
      function playSong() {
          alert(number);
          var number = 2;
          alert(number);
      }
      

      根据 JavaScript 编译器,所有变量的声明/初始化都将移到顶部。这个概念叫做hoisting

      根据编译器,程序将执行如下:

      var number; // Declaration will move to top always in Javascript
      number = 1;
      function playSong() {
          var number;
          alert(number); // Output: undefined - This is a local variable inside the function
          number = 2;
          alert(number); // Output: 2
      }
      

      如果需要访问函数内部的全局变量,请使用window.number

      var number = 1;
      function playSong() {
         var number = 2;
         alert(window.number); // Output: 1   - From a global variable
         alert(number); // Output: 2   - From local variable
      }
      

      【讨论】:

        【解决方案6】:

        您还可以在函数内部删除var 后,在任何函数中访问它,例如window.number

        【讨论】:

        • 这可能是真的,但也许可以谈谈上下文(例如,它在 Node.js 中是否有效?)。
        【解决方案7】:

        我在 2020 年遇到了这个答案,在网上搜索了更多内容后,我发现如果将变量放在函数之外,甚至创建一个名为 globals.js 的文件,显然在 JavaScript 定义中只需将所有全局所需的变量放在该文件中,使该文件成为 jQuery 和您需要的任何其他插件之后脚本标签中的第一个用户 .js 文件,全局变量将在您的其他脚本之前加载并允许您从 globals.js 在页面上的任何脚本中。

        W3C JavaScript Scope

        我已经在我正在构建的 PHP 应用程序中测试了这个理论,并且我已经能够从通过 Ajax 加载的页面中的 globals.js 文件中调用变量来用于故障排除向导的 jconfirm 对话框,用于设置对话框关闭时的返回值。

        【讨论】:

          猜你喜欢
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-28
          • 1970-01-01
          • 2013-03-05
          相关资源
          最近更新 更多