Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
文件之间的Javascript变量_Javascript_Variables_Window_Global - Fatal编程技术网

文件之间的Javascript变量

文件之间的Javascript变量,javascript,variables,window,global,Javascript,Variables,Window,Global,好的,我有两个文件,index.html和functions.js index.html正确地包含functions.js 单击网页中的按钮时,会在函数文件中调用函数,该函数会正确更新网页中的元素,并尝试通过执行window.var1和window.var2来设置两个全局变量。到目前为止,web控制台中没有错误 调用此函数后,我在index.html中运行一段JS代码,尝试读取window.var1和window.var2,但发现它们都为null 为什么呢?你能不能给我指一些关于为什么会发生这种

好的,我有两个文件,index.html和functions.js index.html正确地包含functions.js

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

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

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

编辑 我正在使用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');
        });
放在一个文件里。准备好了

编辑2
我知道我确信这两个函数是按顺序执行的,我在它们的入口点执行一个console.log。

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

window.PositionData = window.PositionData || {};
这一行或者实例化变量,或者如果变量已经存在,则将其设置为等于自身,这样它就不会被覆盖

PositionData.var1;
PositionData.var2;
然后设置/检索如下值:

PositionData.var1 = 1;
PositionData.var2 = PositionData.var1;

在没有完整代码的情况下,我将孤注一掷

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

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

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

鉴于

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

// myGlobal now is null

纬度和长度变量在函数的局部范围内声明。我假设您显示的代码是完整的代码

要正确使用全局作用域,请在代码上方添加以下内容:

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

您确定后一步吗?能否显示您的代码?请在问题中包含相关的index.html和functions.js代码您确定调用函数的整个执行是同步的吗?不涉及ajax?为什么要用window读取变量。在前面?如果没有答案的话,它应该是有效的。他的变量是空的,因为他错误地分配了它们……他只是编辑了他的问题,使其更具描述性,这当然符合他的问题之前…请解释为什么这是一个如此糟糕的答案,它需要被否决?你没有真正提供如何解决问题…这是不正确的,如果你使用严格的模式。如果您有这样的代码,删除窗口将严重失败:函数{use strict;window.foo='bar';}Yorry没有包含完整的源代码,对于本例来说太大/太复杂,无法清理它!结果证明,该函数中的其他函数是异步的,这使事情变得一团糟。@Dio结果证明,该函数中的其他函数是异步的,这使事情变得一团糟=>您没有充分的理由接受这个答案。
var latitude = 0;
var longtitude = 0;