js 全局變數失敗?

火爆浪子
  • 2.8k
navigator.geolocation.getCurrentPosition(successCallback);

    function successCallback(position){
        var lat = position.coords.latitude;
        var long = position.coords.longitude;
    }

    var map;
    function initMap() {
      map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: lat, lng: long},
        zoom: 8
      });
    }
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=xxx&callback=initMap"
    async defer></script>

更新代碼~
這樣要怎麼把lat跟long 丟到initMap?

回复
阅读 1.6k
3 个回答
✓ 已被采纳

资料参考:https://developer.mozilla.org...
上面解释了getCurrentPosition()方法是一个异步执行方法:

*调用 getCurrentPosition() 函数获取用户当前定位位置。这会异步地请求获取用户位置,并查询定位硬件来获取最新信息。**当定位被确定后,定义的回调函数就会被执行。**您可以选择性地提供第二个回调函数,当有错误时会被执行。第三个参数也是可选的,您可以通过该对象参数设定最长可接受的定位返回时间、等待请求的时间和是否获取高精度定位。*

而alert(lat)是同步代码,会先执行,也就是在lat没有赋值的情况下就被执行到了,会打印undefined

这个很正常啊,因为你的successCallback没有被调用啊,它是一个回调函数,而你现在的写法执行到alert(lat)的时候不一定就回调了。

你在successCallback的最好调用initMap就好啦啊。

你想用的话,就在那个successCallback里面用因为只有里面才能保证有这个值。因为是异步

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏