无法更改全局变量JS的值

时间:2013-12-30 18:40:56

标签: javascript global-variables

我有两个全局变量:Lon和Lat 我想在HTML5提供的地理定位功能中更改这些变量的值: 这是我的代码:

window.lat={{geo['latitude']}};
window.lon={{geo['longitude']}};
var SK= readCookie('SK');
if(SK==1)
{
    navigator.geolocation.getCurrentPosition(function(e){
    window.lat=e.coords.latitude;
    window.lon=e.coords.longitude;
    window.zoomi=15;
    })
}

window .lat的最终值总是

window.lat={{geo['latitude']}}

有谁知道为什么?

PS:SK == 1为真,在函数(e)中,我试图提醒值,它们确实发生了变化。 但是一旦失去了功能,一切都会消失

2 个答案:

答案 0 :(得分:1)

Javascript总是同步和单线程的,所以如果你在回调之后检查window.lat它甚至在gelocation调用之前执行它并且它具有相同的value.geolocation需要几秒钟来获取值,你必须写入你的代码回调函数或编写函数以使用geolcoation值。

window.lat=1;
window.lon=3;
var SK= 1
if(SK==1)
{
    navigator.geolocation.getCurrentPosition(showPosition);

}


//anything written here will be executed before even the getCurrentPosition retuns or sets the results

function showPosition(position)
{
     alert("Latitude: " + position.coords.latitude +  "-Longitude: " + position.coords.longitude); 
    //write your code here to use the location 
} 

这里是jsfiddle http://jsfiddle.net/Xa64Q/解释问题,如果我们在几秒后运行警报它返回正确的值

答案 1 :(得分:0)

使用调试器(如Chrome开发工具或Firebug for Firefox)逐步完成。此代码有效,原则上相同。它适用于这种变量赋值:

window.x = 1;
function change() {
 window.x = 2;   
}
change();
alert(window.x);

我的猜测是getCurrentPosition电话突然失败了。顺便说一句,该调用需要一个错误回调处理程序,因此您应该为您的代码定义一个。