Сеть использует управляемую событиями модель для последовательности действий. Вы правы, предполагая, что если сценарий появится в конце документа, он будет проанализирован позже, чем если бы он появился в начале. Но спецификация HTML не указывает явно, что HTML должен быть представлен перед выполнением вашего скрипта. Таким образом, синтаксический анализ и рендеринг - это разные операции, и Chrome может выбрать выполнение скрипта, как только он завершит его синтаксический анализ.
Так как вы можете правильно упорядочить свои действия? Сеть в целом и javascript, в частности, ориентированы на события. Ваш код может прослушивать различные события и отвечать на них, как вам угодно. В этом случае вы хотите выполнить ваш скрипт после загрузки документа. Взгляните на событие DOMContentLoaded
.
Вот ваш код, измененный для запуска при возникновении события DOMContentLoaded
.
document.addEventListener("DOMContentLoaded", function() {
alert("Am I working right?");
});
Я просто включил ваш вызов функции оповещения в свою функцию обработчика событий.
Функция обработчика события (или обратного вызова) должна быть зарегистрирована на элементе, который генерирует событие, в нашем случае, объект document
. Это делается путем вызова addEventListener()
для этого объекта с двумя аргументами. Первое - это имя события, которое мы хотим прослушать как строку, а второе - это функция, которая должна выполняться при запуске события.
Существует множество событий, определенных для множества различных элементов, и вы даже можете определить свои собственные пользовательские события и ответить на них.