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

Вопрос о множественных готовых()

Предположим, что у меня есть:

<script src="script1.js"></script>
<script src="script2.js"></script>

Оба этих сценария имеют ready() внутри. Будет ли код в script2.js ready() всегда выполняться после первого?

4b9b3361

Ответ 1

Да.

Прежде всего, код в script2.js будет выполнен после script1.js, как это происходит позже в документе (и атрибут defer не установлен).

Кроме того, реализация [source] функции ready:

ready: function( fn ) {
    // Attach the listeners
    jQuery.bindReady();

    // Add the callback
    readyList.done( fn );

    return this;
},

где readyList кажется [source] a отложенный объект [docs]. Это означает, что обратные вызовы выполняются в том порядке, в котором они были добавлены к этому объекту.

Ответ 2

jQuery использует для этого свой собственный объект Deferred. Соответствующий код jQuery доказывает, что он выполняется в следующем порядке:

Когда вы вызываете .ready, функция добавляется к readyList:

readyList.done( fn );

Когда DOM готов, эта функция выполняется:

readyList.resolveWith( document, [ jQuery ] );

Функция resolveWith содержит этот код, который выполняет функции, добавленные как обратные вызовы:

while( callbacks[ 0 ] ) {
    callbacks.shift().apply( context, args );
}

Как вы можете видеть, функции обратного вызова shift ed (выскользнули с начала массива обратного вызова (т.е. readyList)), поэтому сначала выполняется выполнение перед вторым.

Ответ 3

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

Ответ 4

.ready() функции вызываются при первом зарегистрированном получении первой обработанной базы