getCurrentPosition
принимает обратный вызов, который сообщает мне, что он выполняет асинхронную операцию. Таким образом, происходит то, что код внутри вашей анонимной функции, скорее всего, выполняется после вызова map.setCenterAndZoom(mapCenter, 15)
. Когда вы работаете с асинхронными операциями, выполнение продолжается после асинхронного вызова без ожидания завершения (следовательно, асинхронного). Поэтому, если вы зависите от каких-либо данных, поступающих от асинхронного вызова, вам необходимо убедиться, что вы обрабатываете их в обратном вызове, поскольку в противном случае они, скорее всего, не будут вам доступны.
Что вам нужно сделать, это сделать звонок внутри ваш обратный вызов следующим образом:
function load(){
map = new VEMap('MapDiv');
map.LoadMap();
mapCenter = new VELatLong();
if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position)
{
mapCenter.Latitude = position.coords.latitude;
mapCenter.Longitude = position.coords.longitude;
map.SetCenterAndZoom(mapCenter, 15);
//any other code that needs to deal with mapCenter
});
}
}
map
будет доступен внутри анонимной функции, поскольку он ведет себя как замыкание и поэтому лексически связан с областью, в которой он был определен.