文件之间的Javascript变量

时间:2013-01-17 16:38:52

标签: javascript variables window global

好的,所以我有两个文件,index.html和functions.js(index.html正确包含functions.js)。

当点击网页中的按钮时,会在函数文件中调用一个函数,该函数会更新网页中的元素(正确)并尝试设置两个全局变量(通过执行window.var1和{ {1}}。到目前为止,Web控制台中没有任何错误。

调用此函数后,在index.html中我运行了一个JS代码,试图读取window.var2window.var1,但发现它们都是null。

为什么?您能否请您指出一些关于为什么会发生这种情况的材料,而不仅仅是解决方案?

修改的 我正在使用jquery和jquery mobile。 调用这两个函数的事件处理程序是

window.var2

并且位于document.ready()内。

编辑2 我知道这两个函数是按顺序发生的,我在它们的入口点做了一个console.log()。

3 个答案:

答案 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;