2015-10-25 40 views
0

由於某種原因,當我對它做出警告時,我的「initialLocation」變量是未定義的,儘管我明確地將它分配給了getCurrentPosition的回調函數。 變量「initialLocation」被全局聲明爲btw。變量在顯式賦值後未定義在JavaScript中?

也許我不理解封閉的這個概念?

var initialLocation; 

if (navigator.geolocation) { 
    geoLocationError = true; 
    navigator.geolocation.getCurrentPosition(function(position) { 
     initialLocation = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 
     getFood(); 
     }, geoError); 
    alert(initialLocation); 
} else { 
    geoLocationError = false; 
    noGeolocation(geoLocationError); 
} 
+0

你能複製並粘貼錯誤嗎? –

+5

[爲什麼我的變量在函數內部修改後沒有改變? - 異步代碼引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – JJJ

+2

地理定位是異步的....您正試圖在從位置服務返回之前提醒該值。 – charlietfl

回答

1

navigator.geolocation.getCurrentPosition是異步的,所以設置initialLocation之前,你的警報被觸發。您應該在您設置initialLocation之後將您的警報置於回調中。