Это потому, что вы объявляете свои переменные внутри функции. Переменные становятся приватными для функции initialize
и доступны только изнутри. Если вам нужно иметь доступ к вашим переменным вне функции инициализации, то переместите объявление переменной из функции.
var lat;
var lon;
function initialize() {
...
Взгляните на эту статью MDN о переменной области действия в JavaScript.
UPDATE
Повторно просматривая код, я понимаю, что проблема не в переменной области, запуталась в отступе. Я не знаком с API геолокации, но полагаю, что проблема может заключаться в том, что navigator.geolocation.getCurrentPosition()
является асинхронным, поскольку ему придется ждать, пока пользователь разрешит веб-сайту определить местоположение устройства. Поэтому myOptions
будет назначено до того, как будет получена фактическая позиция - таким образом, lat
& lng
все еще не определены, когда назначено myOptions
.
Попробуйте вместо этого:
//main function here
function initialize() {
var lat, lon, map, myOptions;
//check if user has geo feature
if(navigator.geolocation){
navigator.geolocation.getCurrentPosition(
//get position
function(position){
lat = position.coords.latitude;
lon = position.coords.longitude;
//init map
myOptions = {
center: new google.maps.LatLng(lat, lon),
zoom: 16,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
},
// if there was an error
function(error){
alert('ouch');
});
}
//case the users browser doesn't support geolocations
else {
alert("Your browser doesn't support geolocations, please consider downloading Google Chrome");
}
}