-2

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

单击网页中的按钮时,函数文件中会调用一个函数,该函数会更新网页中的元素(正确)并尝试设置两个全局变量(通过执行window.var1和来解决这个问题window.var2。到目前为止,Web 控制台中没有错误.

在调用此函数后,我在 index.html 中运行了一段 JS 代码,该代码尝试读取window.var1window.var2,但发现它们都为空。

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

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

 $('#map').live('pageshow',function(){
            console.debug('clicked button, calling function');
            position(longitude,latitude); //sets the global vars
            initializeMap();
            console.debug('finished with map calling');
        });

并位于 document.ready() 内。

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

4

3 回答 3

1

在没有完整代码的情况下,我会四处走动......

可能是您在函数中声明和设置这些变量。函数范围意味着它们不存在于声明它们的任何函数之外。解决方案是在任何函数之外(即在文件顶部)声明它们(使用var关键字),并将它们设置在函数内部。

否则,它们不是全球性的。

如果完全不是这样,请原谅我。

var myGlobal = 0;

myFunction = function() {
    myGlobal = 42;
}

// myGlobal now is equal to 42

然而...

myFunction = function() {
    var myGlobal = 42;
}

// myGlobal now is null
于 2013-01-17T17:07:55.100 回答
1

纬度和经度变量在函数的本地范围内声明。(我假设您显示的代码是完整的代码)

要正确使用全局范围,请将其添加到您的代码上方:

var latitude = 0;
var longtitude = 0;

现在您的功能将正常工作。但是请记住,全局变量是不好的。从长远来看,它们可能会弄乱您的代码。我建议您使用模块设计模式。

于 2013-01-17T17:14:39.650 回答
-2

因此,我通常对希望在全局范围内访问的变量执行此操作,但不会污染实际的全局区域:

window.PositionData = window.PositionData || {};

此行要么实例化变量,要么如果它已经存在,则将其设置为等于自身,因此不会被覆盖。

PositionData.var1;
PositionData.var2;

然后像这样设置/检索值:

PositionData.var1 = 1;
PositionData.var2 = PositionData.var1;
于 2013-01-17T16:48:07.623 回答