2015-08-08 72 views
1

我一直在努力尝试获得一些代码的工作,我认为这是由于我的变量范围。相反,张贴在这里我所有的代码,我只是做了一个简化的版本要问“为什么不这项工作”:JS全球和本地变量

$(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

是在文档的开头没有一个全球性声明的变量????

谢谢!

回答

0

这不是全局变量。将其定义在ready函数之外。

var aGlobalVariable = 25; 

$(document).ready(function() { 

    console.log("INITIALIZE"); 


    function testFunction(){ 

     var aLocalVariable = 5; 

     var sumVariables = aGlobalVariable + aLocalVariable; 

     console.log(sumVariables); 
    } 

}); 

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

0

函数表达式也创建变量作用域。

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

你的变量是在函数内部,并与var声明,所以它不是一个全球性的。

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

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

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

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(); 
}); 

这里有一个的jsfiddle显示此: https://jsfiddle.net/0c8rpLmj/

aGlobalVariable是不确定的,当您试图通过控制台来查看它,因为它不是事实上的全球(你已经在ready函数范围内定义了它)。