变量在JavaScript中神秘地未定义

时间:2014-05-04 14:17:52

标签: javascript scope maps coordinates undefined

我想使用纬度和经度向气象服务器发出请求,我对获取纬度和经度没有任何问题 - 它显示在我的HTML中完美附加。神秘的是,当我尝试使用服务器请求和console.log()的纬度和经度变量时,它们是未定义的。应该定义它们,因为window.property使变量property成为全局范围。看看代码:

function getLocation(){
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition); //Runs the function "showPosition()"
    }
    else {
        locationDisplay.innerHTML = "Could not find your location, please enter one manually.";
    }
}

function showPosition(position){
    window.latitude = Math.floor(position.coords.latitude); //latitude as integer
    window.longitude = Math.floor(position.coords.longitude); //longitude as integer

    locationDisplay.innerHTML = "Latitude: " + window.latitude + "<br> Longitude: " + window.longitude;
} //.innerHTML adds the coordinates to a div called locationDisplay

getLocation();
console.log(window.latitude + " " + window.longitude);

另一个稍微相关的问题:天气服务是否足够准确地描述纬度和经度整数的位置,还是应该使用一些小数点?

1 个答案:

答案 0 :(得分:1)

navigator.geolocation.getCurrentPosition(showPosition);未运行showPosition函数。

您将此作为成功回调方法传递给navigator.geolocation.getCurrentPosition。 (这是异步调用)。

showPosition将在getCurrentPosition函数成功后执行。而console.log(window.latitude + " " + window.longitude);尝试在window.latitude and window.longitude完成任务之前获取getCurrentPosition值。在那个时间点,两个变量都只是未定义的。

要避免这种情况,可以采用快速解决方法

使用setTimeout or setInterval等待getCurrentPosition响应。或者使用默认值设置showPosition函数之外的全局变量。