【问题标题】:JS Global and Local VariablesJS 全局变量和局部变量
【发布时间】:2023-03-14 16:07:02
【问题描述】:

我一直在努力让一些代码工作,我认为这是由于我的变量范围。我没有在这里发布我所有的代码,而是制作了一个简化版本来问“为什么这不起作用”:

$(document).ready(function() {

console.log("INITIALIZE");
var aGlobalVariable = 25;

function testFunction(){

    var aLocalVariable = 5;

    var sumVariables = aGlobalVariable + aLocalVariable;

    console.log(sumVariables);
}

});

我希望 testFunction 能够看到一个全局变量,将 25 添加到 5,然后输出 30。它没有这样做。如果我尝试对其进行 console.log,我什至看不到全局变量:

在文档开头声明的变量不是全局变量????

谢谢!

【问题讨论】:

    标签: javascript variables scope


    【解决方案1】:

    aGlobalVariable 在 testFunction 中确实是已知的。调用该函数并查看控制台:

    $(document).ready(function() {
    
        console.log("INITIALIZE");
        var aGlobalVariable = 25;
    
        function testFunction() {
    
            var aLocalVariable = 5;  
            var sumVariables = aGlobalVariable + aLocalVariable;
    
            console.log(sumVariables);
        }
    
        testFunction();
    });
    

    这是一个显示这个的 jsfiddle: https://jsfiddle.net/0c8rpLmj/

    aGlobalVariable 在您尝试通过控制台查看它时未定义,因为它实际上不是全局的(您已在就绪函数范围内定义它)。

    【讨论】:

      【解决方案2】:

      函数表达式也创建变量范围。

      $(document).ready(function() {
          var aGlobalVariable = 25;
      

      您的变量在函数内部并使用 var 声明,因此它不是全局变量。

      如果要使其成为全局函数,请将其移到函数表达式之外。

      var aGlobalVariable = 25;
      $(document).ready(function() {
      

      也就是说,将其设为全球可能不是一个好主意。将其保留在本地范围内,但该范围内的所有函数都可以访问,这意味着您对其他脚本的更改会减少干扰您的变量。

      【讨论】:

        【解决方案3】:

        这不是一个全局变量。在ready 函数之外定义它。

        var aGlobalVariable = 25;
        
        $(document).ready(function() {
        
            console.log("INITIALIZE");
        
        
            function testFunction(){
        
                var aLocalVariable = 5;
        
                var sumVariables = aGlobalVariable + aLocalVariable;
        
                console.log(sumVariables);
           }
        
        });
        

        现在你应该可以看到它工作了。

        【讨论】: