JavaScript. Подробное руководство, 6-е издание, стр. 176
<b><script defer src="deferred.js"></script></b><b><script async src="async.js"></script></b>Оба атрибута,
<b>defer</b><b>async</b><b>document.write()</b><b>defer</b><b>async</b><b><script></b><b>async</b><b>defer</b>Обратите внимание, что отложенные сценарии выполняются в порядке их следования в документе. Асинхронные сценарии выполняются сразу же, как только будут загружены, т. е. они могут выполняться в произвольном порядке.
На момент написания этих строк атрибуты
<b>async</b><b>defer</b>Имеется возможность загружать и выполнять сценарии асинхронно, даже если броузер не поддерживает атрибут
<b>async</b><b><script></b><b>loadasync()</b>Пример 13.4. Асинхронная загрузка и выполнение сценария
<b>// Асинхронная загрузка сценария из указанного URL-адреса и его выполнение </b><b>function loadasync(url) {</b><b> var head = document.getElementsByTagName("head")[0]; // Отыскать <head> </b><b> var s = document.createElement("script"); // Создать элемент <script></b><b> s.src = url; // Установить атрибут src</b><b> head.appendChild(s); // Вставить <script> в <head></b><b>}</b>Примечательно, что данная функция
<b>loadasync()</b>13.3.2. Выполнение, управляемое событиями
Древняя JavaScript-программа, представленная в примере 13.3, является синхронной: она запускается на выполнение в процессе загрузки страницы, производит вывод и завершается. Такие программы редко используются в наши дни. Программы, которые пишутся в настоящее время, регистрируют функции обработчиков событий. Эти функции вызываются асинхронно, по событиям, для обработки которых они были зарегистрированы. Веб-приложения, в которых требуется реализовать поддержку горячих комбинаций клавиш для выполнения типичных операций, могут, например, регистрировать обработчики событий нажатия клавиш. Даже неинтерактивные программы используют события. Представьте, что требуется написать программу, которая должна проанализировать структуру документа и автоматически сгенерировать оглавление. В этом случае не требуется обрабатывать события, возникающие в результате действий пользователя, однако программа все же должна зарегистрировать обработчик события
<b>onload</b>События и обработка событий - это тема главы 17, а данный раздел содержит лишь краткий обзор. События имеют имена, такие как
<b>«click», «change», «load», «mouseover», «keypress»</b><b>«readystatechange»,</b><b>НТМLButtonelement</b><b>«readystatechange»</b><b>XMLHttpRequest</b>Если необходимо, чтобы программа откликалась на какое-то событие, необходимо написать функцию, которая называется «обработчиком событий», «приемником событий» или просто «функцией обратного вызова». После этого функции нужно зарегистрировать, чтобы она вызывалась при появлении события. Как отмечалось выше, это можно сделать с помощью HTML-атрибутов, но такое смешивание JavaScript-кода с разметкой HTML может приводить к путанице. Поэтому обычно лучше регистрировать обработчики событий путем присваивания JavaScript-функций свойствам целевого объекта, как показано ниже:
<b>window.onload = function() { ... };</b><b>document.getElementById("button1").onclick = function() { ... };</b><b>function handleResponse() { ... }</b><b>request.onreadystatechange = handleResponse;</b>Обратите внимание, что свойства обработчиков событий имеют имена, которые в соответствии с соглашениями начинаются с префикса «on», за которым следует имя события. Отметьте также, что в примере выше не производится вызов функций: здесь выполняется присваивание функций соответствующим свойствам. Броузер автоматически будет вызывать эти функции при появлении событий. При создании асинхронных обработчиков событий часто используются вложенные функции, и на практике достаточно часто приходится писать программный код, который определяет функции внутри функций, вложенных в другие функции.
В большинстве броузеров для большинства типов событий обработчики получают в виде аргумента объект, свойства которого содержат информацию о событии. Например, объект, передаваемый обработчику события
<b>«click»,</b>