无法从方法内部为变量赋值

时间:2017-06-23 10:12:34

标签: javascript google-maps google-maps-markers

我正在使用Google Maps JS API。我正在尝试在地图的中心设置一个标记。我正在使用currLocation变量来保存当前位置。 currLocation变量在内联私有方法(第1节)中具有值,但是当我想设置标记时(第2节)它是null。

Stackoverflow有很多“无法将值设置为全局变量”的解决方案,但我无法用他们的参考解决我的问题。

任何帮助都将不胜感激。

function initMap() {

    var currLocation = null;

    var defaultCenter = { lat: 34.397, lng: 150.644 };

    //Set Map properties 
    var map = new google.maps.Map(document.getElementById('gmap'), {
        scrollwheel: true,
        zoom: 10
    });


    //Get Current Location - Section 1 
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            currLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
            map.setCenter(currLocation);
        });
    }
    else {
        map.setCenter(defaultCenter);
    }

    //Put marker on the current location - Section 2
    var marker = new google.maps.Marker({
        position: currLocation,
        map: map
    });
}

2 个答案:

答案 0 :(得分:0)

问题在于你的控制流逻辑。如果第一个特征检测失败(即,if(navigator.geolocation))(根据您的描述,它听起来就像那样),那么currLocation的值将保持为空。如果,不希望在没有currLocation的情况下继续:

  1. else块中抛出异常,因为导航器没有地理定位。
  2. 将其设置为null以外的可接受默认值。

答案 1 :(得分:0)

你应该把标记函数放在getCurrentPosition的成功回调中。因为它是一个异步函数。在调用成功回调函数之前,currLocation将为null。