在javascript函数中返回未定义的值

时间:2014-02-28 09:51:53

标签: javascript function return undefined

我有以下代码:

js load:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>

js功能:

<script type="text/javascript">

    var get_location;

    function get_google_latlng() {

        var geocoder =  new google.maps.Geocoder();
        geocoder.geocode( { 'address': 'iran'}, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                window.get_location = results[0].geometry.location.lat();
            } else {
                window.get_location = status;
            }
        });

        return window.get_location;
    }

    var lat = get_google_latlng();

    alert(lat);
</script>

返回函数为undefined

window.get_location命令也不起作用。

2 个答案:

答案 0 :(得分:2)

您所遇到的是异步功能的问题。您没有立即使用地理编码方法的值,因为您正在进行ajax请求并且需要时间。典型的JavaScript新手。

回调和闭包是在编程JavaScript时让您的生活更轻松的技巧。我会建议你改变你的思维方式,这不再是turbo-pascal了。这是JavaScript。的异步即可。不要指望每个函数都能立即返回结果。

回调示例:

// Ugly global variable
var get_location;

// Even more ugly global function
function get_google_latlng(callback) {

    var geocoder =  new google.maps.Geocoder();
    geocoder.geocode( { 'address': 'iran'}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            window.get_location = results[0].geometry.location.lat();
        } else {
            window.get_location = status;
        }

        // Now you invoke the callback to notify that the results are ready
        callback();
    });

    // This is absolutely unnecessary
    return window.get_location;
}

get_google_latlng(function(){

   // Only here we are sure the variable was actually written       
   alert(window.get_location);
});

最后一件事,永远不会永远地在“窗口”(JavaScript中的全局对象)下声明函数和变量,这是一种反模式,将来会给您带来麻烦。

请学习如何制作匿名函数。

答案 1 :(得分:0)

试试这段代码:

var get_location;
var geocoder =  new google.maps.Geocoder();
geocoder.geocode( { 'address': 'iran'}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            get_location = results[0].geometry.location.d;
            alert(get_location);
        }
});

您的代码存在问题,首先执行警报,然后执行获取位置功能。<​​/ p>