Javascript函数返回未定义的值,而不是数字

Javascript函数返回未定义的值,而不是数字,javascript,Javascript,我有两个Javascript函数,它们尝试使用Google Maps API地理代码查找地址的纬度和经度: function getLatLon(address) { var location = -1; geocoder.geocode( { 'address': address}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { var

我有两个Javascript函数,它们尝试使用Google Maps API地理代码查找地址的纬度和经度:

function getLatLon(address) {
    var location = -1;
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lon = results[0].geometry.location.lng();
            location = new Array(lat, lon);
            //document.getElementById('results').innerHTML = location[0];
        } else {
            alert("Geocode was not successful.");
        }
    });
    return location;
}

function search() {
    var address = document.getElementById('address').value;
    var location = getLatLon(address);
    document.getElementById('results').innerHTML = location[0];
}
当getLatLon中的位置[0]在results div中打印出正确的数字时,search中的位置[0]返回undefined。你知道为什么会这样吗?我尝试从getLatLon返回一个简单的字符串Hello,但效果很好。

问题是geocoder。geocode。。。是异步的,因此无法返回值。请像这样尝试:

function getLatLon(address, callback) {
    geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lon = results[0].geometry.location.lng();
            location = new Array(lat, lon);
            callback(location);
        } else {
            alert("Geocode was not successful.");
        }
    });
}

function search() {
    var address = document.getElementById('address').value;
    getLatLon(address, function(location) {
        document.getElementById('results').innerHTML = location[0];
    });
}
根据,调用geocoder.geocoderequest,回调函数将立即不返回任何内容。收到并处理响应后,将调用回调函数。在此之前,位置将保留为您设置的任何值


调用getLatLon时,需要在回调函数中启动搜索本身。为了灵活性,您可以通过向getLatLon添加回调参数来实现这一点,该参数将从geocode回调函数中调用。

geocoder.geocode是否异步?如果是,getLatLon应始终返回-1。一直以来,我都有一个问题。getLatLon如何返回未定义?位置是-1,所以它也应该返回-1。@Derek-我认为问题在于位置[0]未定义,而不是getLatLon。我的问题措辞很糟糕。很明显,我需要更好地理解回调。谢谢对于任何有类似问题的人,这里有一个我用来理解回调的例子。