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?
在successCallback裡面呼叫initMap不就好了...
navigator.geolocation.getCurrentPosition(successCallback);
    function successCallback(position){
        var lat = position.coords.latitude;
        var long = position.coords.longitude;
        initMap(lat,long);
    }
    var map;
    function initMap(lat,long) {
      map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: lat, lng: long},
        zoom: 8
      });
    }
                asys0512
改了...
怪了他說:InvalidValueError: setCenter: not a LatLng or LatLngLiteral: in property lat: not a number
大大您好,您標題下”全域(局)變數失敗“
可我在您的程式碼中沒看到全域變數
successCallback 中您宣告兩個“區域變數”
所以在initMap 中您想使用lat 和long 兩個變數找不到是正常的!
這是“區域(Scope)”不同導致的結果
小弟不只是想幫您解決問題
想幫您建立正確的“全域變數(golbal)”和“區域變數(local)”觀念
這題解法通常有兩種
一種H大已經提供是function call function的做法
一種就是正確的宣告全域變數並使用它(如下)
//宣告全域變數lat, long, map
var lat, long, map;
navigator.geolocation.getCurrentPosition(successCallback);
    function successCallback(position){
        //把座標經緯度assign到全域變數
        lat = position.coords.latitude;
        long = position.coords.longitude;
        initMap(lat,long);
    }
    function initMap() {
      map = new google.maps.Map(document.getElementById('map'), {
        //使用全域變數中的lat, long
        center: {lat: lat, lng: long},
        zoom: 8
      });
    }