Глобальные переменные в JavaScript? - PullRequest
0 голосов
/ 02 апреля 2011

Я новичок в Javascript, и следующий код выводит меня из себя. Насколько я понимаю, вы можете назначать значения глобальным переменным, опуская переменную перед ними, и вам не нужно определять какое-либо начальное значение, когда вы объявляете глобальное значение в первую очередь. Однако почему следующий код не работает? (Не работая, я имею в виду, что вызов document.write в main () выдает «undefined» для «ulat»).

var ulat;

function write(latitude) {
    ulat = latitude;
    document.write("<h1> This works:" + ulat + "</h1>");
}

function getloc() {

            if (navigator.geolocation) {
                navigator.geolocation.getCurrentPosition(
                function(position) {
                    write(position.coords.latitude);
                },
                function (error) {
                    switch(error.code) {
                        case error.TIMEOUT:
                            alert ('Timeout');
                            break;
                        case error.POSITION_UNAVAILABLE:
                            alert ('Position unavailable');
                            break;
                        case error.PERMISSION_DENIED:
                            alert ('Permission denied');
                            break;
                        case error.UNKNOWN_ERROR:
                            alert ('Unknown error');
                            break;
                    }
                });

            }
            else {
                alert("Geolocation is not supported by your web browser.");                 
            }       
}


function main() {
      getloc();
      document.write("<h1> This doesn't work: " + ulat + "</h1>");
}

Любая помощь? Спасибо!

Ответы [ 3 ]

4 голосов
/ 02 апреля 2011

getCurrentPosition - асинхронный . Он не запускается при вызове, запускает при вызове. Поэтому, когда main проверяет значение, обратный вызов успеха не вызывается, и ulat.

ничего не назначается.

Итак, вот что делает ваш код:

  1. main вызывается
  2. main звонки getloc
  3. getloc видит, что геолокация доступна, и запускает запрос геолокации. Затем он немедленно возвращается.
  4. main выводит значение ulat, которое все еще равно undefined.
  5. Через некоторое время будет вызван ваш success обратный вызов (или, конечно, сбой). В этот момент я немного удивлен, что ваша страница не гаснет, потому что вы будете звонить document.write после основного анализа, что подразумевает document.open, который разрывает страницу и начинается с пробела. шифер. Но я не использую document.write достаточно часто, чтобы вспомнить все капризы ...
0 голосов
/ 02 апреля 2011

Вам нужно позвонить на главную: 'Основной ();' * * тысяча один

0 голосов
/ 02 апреля 2011

var для локальных переменных. Для глобальных переменных укажите ссылку отдельно или как window.reference. Попробуйте изменить код, чтобы удалить первую строку var ulat;.

...