我一直在努力尝试让一些代码工作,我认为这是由于我的变量范围。我没有在这里发布我的所有代码,而是制作了一个简化版本来询问“为什么这不起作用”:
$(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,我甚至看不到全局变量:
是在文档开头声明的变量不是全局变量????
谢谢!
答案 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() {
那就是说,把它变成全球可能并不是一个好主意。将其保留在本地范围内,但该范围内的所有函数都可访问,这意味着您更少的其他脚本会干扰您的变量。