js 全局變數失敗?

发布于 2022-09-07 19:27:39 字数 584 浏览 14 评论 0

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

等数载,海棠开 2022-09-14 19:27:39

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

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

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

享受孤独 2022-09-14 19:27:39

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

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

葬花如无物 2022-09-14 19:27:39

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文