Широта геолокации HTML5 и длинные координаты текущей позиции GPS в переменную

#javascript #html #variables #geolocation #scope

#javascript #HTML #переменные #геолокация #область видимости

Вопрос:

Я пытаюсь получить текущие значения широты и долготы пользователя, используя функциональность геолокации HTML5. После исследования и попытки получить ответ на другие вопросы здесь, в StackOverflow, я, похоже, все еще неправильно понимаю концепцию доступа к глобальной переменной. Все, что я видел до сих пор, создает впечатление, что существует проблема с областью действия. Код, который я использую, выглядит так, как будто он использует функцию внутри функции. В настоящее время я выполняю следующий код:

 <script type="text/javascript">
var currentLat = 0;
var currentLong = 0;

function getPosition() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    }
}
function showPosition(position) {
    console.log(position.coords.latitude);
    console.log(position.coords.longitude); 
}

getPosition();
 

В настоящее время этот код работает в том смысле, что он записывает информацию в консоль. Однако, если я изменю код на это, похоже, это не сработает:

 <script type="text/javascript">
var currentLat = 0;
var currentLong = 0;

function getPosition() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(showPosition);
    }
}
function showPosition(position) {
    currentLat = position.coords.latitude;
    currentLong = position.coords.longitude; 
}

getPosition();

console.log(currentLat   ","   currentLong);
 

Он просто возвращает 0, как я установил изначально. Я много искал по глобальным переменным, но большинство онлайн-ресурсов (включая StackOverflow) утверждают, что я могу получить доступ к этим переменным, если я не переопределяю переменную внутри функции (или не создаю локальную переменную области видимости, которая переопределяет глобальную переменную).

Комментарии:

1. Вы правы в своей оценке области. Однако getCurrentPosition — это асинхронный метод с showPosition в качестве обработчика успеха. Поэтому ваши переменные не имеют возвращаемых значений при консоли. выполняется регистрация.

Ответ №1:

Благодаря комментарию gro я обнаружил, что это работает:

     window.onload = function(){
    navigator.geolocation.getCurrentPosition(function(position) {  
      window.currentLat = position.coords.latitude;
      window.currentLong = position.coords.longitude;
      window.currentLatLong = new google.maps.LatLng(currentLat,currentLong);
      init();
    });
}

function init() {
    // run code here and reference currentLatLong, currentLat and currentLong
}