很奇怪的Javascript范围界定问题(Very strange Javascript scopi

2019-10-29 04:01发布

以下变量my_cords是不确定的,当它到达了谷歌地图的功能,任何人都可以理解为什么和可能给我周围的工作? 我曾经就在顶部定义它,并设置一个回调函数,这是我以前见过的全局变量里面工作..

$(document).ready(function () {

var my_cords;
var map;

function getCareHome() {

    geocoder = new google.maps.Geocoder();

    //var address = document.getElementById("address").value;

    var address = "address here";

    geocoder.geocode( { 'address': address}, function(results, status) {

        if (status == google.maps.GeocoderStatus.OK) {

            my_cords = results[0].geometry.location;

        } else {

            alert("Sorry we couldn't locate the carehome on the map: " + status);
            return false;

        }

    });



    var myOptions = {
        zoom: 7,
        center: my_cords,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

}

getCareHome();

});

Answer 1:

.geocode是一个异步调用。

尝试在函数中使用回调。

例如:

geocoder.geocode( { 'address': address}, function(results, status) {

    if (status == google.maps.GeocoderStatus.OK) {

        createMap(results[0].geometry.location);

    } else {

        alert("Sorry we couldn't locate the carehome on the map: " + status);
        return false;

    }

});

var createMap = function(my_cords)  {
     var myOptions = {
        zoom: 7,
        center: my_cords,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}


Answer 2:

geocoder.geocode是一个异步函数。 那台匿名函数my_cords之前将不会运行某些事件(HTTP响应的可能到来)触发。

将依赖于它运行到该函数中的代码。



Answer 3:

由于geocode 异步运行,使用您的代码my_cords后(设置myOptions )会看到的价值my_cords完成回调之前,geocode运行-所以myOptions.centerundefined

如果您需要my_cords设立时myOptions ,你必须代码进入上回调geocode



文章来源: Very strange Javascript scoping issue