Javascript выполняется так, как его видят. Обычно , браузер прекращает синтаксический анализ страницы, как только он видит тег <script>
, загружает и запускает скрипт, а затем продолжает работу. Вот почему обычно рекомендуется размещать теги <script>
внизу, чтобы у пользователя не было пустой страницы, пока браузер ожидает загрузки сценариев.
Однако, начиная с Firefox 3.5, скрипты загружаются в фоновом режиме, в то время как остальная часть страницы отображается. В необычном сейчас случае, когда сценарий использует document.write
или аналогичный, Firefox будет выполнять резервное копирование и перерисовывать при необходимости. Я не думаю, что другие браузеры делают это в данный момент, но я не удивлюсь, если это произойдет, и IE по крайней мере поддерживает атрибут defer
в теге <script>
, который будет откладывать загрузку скрипта до окончания страница загружена.
DOMContentLoaded
именно так: он срабатывает, как только DOM загружен. То есть, как только браузер проанализировал весь HTML и создал его внутреннее дерево. Он НЕ ожидает загрузки изображений, CSS и т. Д. DOM - это все, что вам обычно требуется для запуска любого Javascript, так что приятно не ждать других ресурсов. Однако я считаю, что только Firefox поддерживает DOMContentLoaded
; в других браузерах ready()
просто прикрепит событие к обычному старому onload
.
Javascript гарантированно будет работать в том порядке, в котором он указан в вашем HTML, поэтому просто убедитесь, что ваша функция определена, прежде чем пытаться присоединить его к событию.