好的,所以我有两个文件,index.html和functions.js(index.html正确包含functions.js)。
当点击网页中的按钮时,会在函数文件中调用一个函数,该函数会更新网页中的元素(正确)并尝试设置两个全局变量(通过执行window.var1
和{ {1}}。到目前为止,Web控制台中没有任何错误。
调用此函数后,在index.html中我运行了一个JS代码,试图读取window.var2
和window.var1
,但发现它们都是null。
为什么?您能否请您指出一些关于为什么会发生这种情况的材料,而不仅仅是解决方案?
修改的 我正在使用jquery和jquery mobile。 调用这两个函数的事件处理程序是
window.var2
并且位于document.ready()内。
编辑2 我知道这两个函数是按顺序发生的,我在它们的入口点做了一个console.log()。
答案 0 :(得分:1)
在没有完整代码的情况下,我出去了......
可能是您在函数内声明并设置这些变量。函数范围意味着它们不存在于声明的任何函数之外。解决方案是在任何函数之外(即在文件的顶部)声明它们(使用var
关键字),并将它们设置在函数内。
否则,它们不是全球性的。
如果完全不是,请原谅我。
var myGlobal = 0;
myFunction = function() {
myGlobal = 42;
}
// myGlobal now is equal to 42
...而
myFunction = function() {
var myGlobal = 42;
}
// myGlobal now is null
答案 1 :(得分:1)
纬度和经度变量在函数的局部范围内声明。(我假设您显示的代码是完整的代码)
要正确使用全局范围,请在代码上方添加:
var latitude = 0;
var longtitude = 0;
现在您的功能将正常运行。 但请记住,全局变量是坏的。从长远来看,它们会使代码陷入困境。我建议您使用module设计模式。
答案 2 :(得分:-2)
所以我通常会为我想在全局范围内访问的变量执行此操作,但不会污染实际的全局区域:
window.PositionData = window.PositionData || {};
这一行要么实例化变量,要么它已经存在,设置它等于它自己,所以它不会被覆盖。
PositionData.var1;
PositionData.var2;
然后设置/检索这些值:
PositionData.var1 = 1;
PositionData.var2 = PositionData.var1;