Область видимости переменной jQuery / последовательность вызовов - PullRequest
1 голос
/ 05 августа 2011

У меня проблемы с пониманием области переменных jQuery.

var myVar;

function getMyVar() {
    myVar = 'test';
}

$(window).load(function() {
    getMyVar();
});

alert(myVar);   

Этот код выдаст предупреждение "undefined", и мне нужно, чтобы он показал "test", и я хочу понять мои проблемы с областью здесь.*

Ответы [ 4 ]

3 голосов
/ 05 августа 2011

Это не проблема объема.

alert выполняется еще до того, как будет вызвано событие window.load, в котором переменной myVar присваивается значение test.

Согласно документам MDN:

Событие загрузки происходит в конце процесса загрузки документа. В В этот момент все объекты в документе находятся в DOM, и все изображения и подкадры завершили загрузку.

2 голосов
/ 05 августа 2011

Проблема в том, что getMyVar не вызывается до тех пор, пока окно не загружено, в то время как предупреждение выполняется немедленно. Таким образом, предупреждение происходит до того, как переменная определена. Дело не в объеме, а в асинхронном выполнении функций загрузки окна.

1 голос
/ 05 августа 2011

Область видимости не ограничивается jQuery. То, как javascript определяет область видимости, это то, что здесь правил. jQuery - это библиотека, построенная на основе JavaScript.

Сказав это, вы объявляете глобальную переменную, которая доступна каждому. Однако назначение происходит после завершения загрузки DOM. Пока оповещение запускается сразу.

Если вы переместите предупреждение внутри .load после вызова на getMyVar(), вы увидите правильное значение, выводимое.

0 голосов
/ 05 августа 2011

это не проблема объема.

alert(myVar); запускается до getMyVar();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...