Подтвердить что ты не робот

Порядок выполнения документа jquery готов

Предположим, у меня есть файл js, который выглядит так:

$(document).ready(function() { // first task} );
$(document).ready(function() { // second task } );
$(document).ready(function() { // third task } );

После загрузки файла задачи выполняются в порядке. Я не могу понять, почему? Я предполагаю, что методы обратного вызова запускаются, когда происходит событие "on ready". Как сохраняется порядок выполнения? Являются ли последовательные обратные вызовы в очереди в каком-то месте?

Примечание. Я знаю, что это очень наивный способ кодирования. Я написал фрагмент только для того, чтобы понять, что в моих проектах не записывать такой код.

4b9b3361

Ответ 1

Ваши обработчики вставляются в массив (readyList) для выполнения в дальнейшем, когда document готовый.

Они поставлены в очередь следующим образом:

readyList.push( fn );

И будет выполнен, когда будет готов как это:

var fn, i = 0;
while ( (fn = readyList[ i++ ]) ) {
  fn.call( document, jQuery );
}

Если документ уже готов, они будут выполняться немедленно, что все еще в порядке.

Ответ 2

Функции, которые вы указали, упорядочены в списке. Когда DOM готов, jQuery выполняет итерацию через этот список и вызывает функции в этом порядке.

Ваш список станет чем-то вроде..

handlers = [ function(){ alert('first') }, function() { alert('second')} ];

Затем цикл повторяется через...

for ( var i = 0, l = handlers.length; i<l; ++i ) {
    handlers.apply( document, arguments )
}

И функции вызываются в контексте документа.

Ответ 3

Это не самое лучшее, но внутри $(window).load у вас может быть больше контроля. после $(document).ready

$(window).load( fn );