JS全局变量和局部变量

时间:2015-08-08 17:46:24

标签: javascript variables scope

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

$(document).ready(function() {

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

function testFunction(){

    var aLocalVariable = 5;

    var sumVariables = aGlobalVariable + aLocalVariable;

    console.log(sumVariables);
}

});

我希望testFunction能够看到aGlobalVariable,添加25到5,输出30.它不会这样做。如果我尝试使用它的console.log,我甚至看不到全局变量:

enter image description here

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

谢谢!

3 个答案:

答案 0 :(得分:2)

aGlobalVariable确实在testFunction中已知。拨打该功能并查看控制台:

$(document).ready(function() {

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

    function testFunction() {

        var aLocalVariable = 5;  
        var sumVariables = aGlobalVariable + aLocalVariable;

        console.log(sumVariables);
    }

    testFunction();
});

这是一个显示这个问题的方法: https://jsfiddle.net/0c8rpLmj/

当您尝试通过控制台查看它时,

aGlobalVariable未定义,因为它实际上不是全局的(您已在就绪函数范围内定义它)。

答案 1 :(得分:0)

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

var aGlobalVariable = 25;

$(document).ready(function() {

    console.log("INITIALIZE");


    function testFunction(){

        var aLocalVariable = 5;

        var sumVariables = aGlobalVariable + aLocalVariable;

        console.log(sumVariables);
   }

});

现在你应该能够看到它的工作。

答案 2 :(得分:0)

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

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

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

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

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

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