Порядок выполнения документа jquery готов
Предположим, у меня есть файл js, который выглядит так:
$(document).ready(function() { // first task} );
$(document).ready(function() { // second task } );
$(document).ready(function() { // third task } );
После загрузки файла задачи выполняются в порядке. Я не могу понять, почему?
Я предполагаю, что методы обратного вызова запускаются, когда происходит событие "on ready". Как сохраняется порядок выполнения? Являются ли последовательные обратные вызовы в очереди в каком-то месте?
Примечание. Я знаю, что это очень наивный способ кодирования. Я написал фрагмент только для того, чтобы понять, что в моих проектах не записывать такой код.
Ответы
Ответ 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 );