当在navigator.geolocation.getCurrentPosition之外时,变量返回为undefined

时间:2014-11-16 03:27:19

标签: javascript geolocation

所以过去几个小时我一直在讨论这个问题。我试图通过使用导航器对象获取用户的位置,并且我能够得到lat和long就好了,但是当我尝试返回它并将其用作Google Maps LatLng对象的变量时,它返回为undefined。

以下是代码:

function getCurrentLat(){
    var lat
    if(navigator.geolocation){

        navigator.geolocation.getCurrentPosition(function(position) {
            lat = position.coords.latitude;
            alert(lat);
        });
        alert(lat);
    }else{
        console.log("Unable to access your geolocation");
    }
    return lat;
}

getCurrentPosition函数中的第一个警报将显示正确的纬度,但是,函数外的第二个警告显示为undefined。如何在getCurrentPosition()函数之外正确显示变量?

1 个答案:

答案 0 :(得分:0)

getCurrentPosition接受回调,并且在该函数中,您最终会得到不同的内部范围(并且可能不会立即执行)。因此,唯一可以做到这一点的方法是返回未来或接受回调,例如:

function getCurrentLat(callback){
    if(navigator.geolocation){

        navigator.geolocation.getCurrentPosition(function(position) {
            callback(position.coords.latitude);
        });
    }else{
        console.log("Unable to access your geolocation");
    }
}

否则,很明显为什么lat未定义,因为getCurrentPosition甚至没有机会执行并在函数退出之前调用回调。