#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
}