Одной из важнейших характеристик любого программного окружения является возможность запланировать исполнение программного кода в некоторый мо_ мент времени в будущем. Ядро языка JavaScript не предоставляет такой воз_ можности, но в клиентском языке JavaScript такая возможность предусмотрена в виде глобальных функций setTimeout(), clearTimeout(), setInterval() и clearIn_ terval(). Хотя в действительности эти функции ничего не делают с объектом Win_ dow, они описываются в этой главе, потому что объект Window является глобаль_ ным объектом, а данные функции являются методами этого объекта.
Метод setTimeout() объекта Window планирует запуск функции через определен_ ное число миллисекунд. Метод setTimeout() возвращает значение, которое может быть передано методу clearTimeout(), позволяющему отменить запланированный ранее запуск функции.
Метод setInterval() похож на setTimeout(), за исключением того, что он автома_ тически заново планирует повторное исполнение. Подобно setTimeout(), метод setInterval() возвращает значение, которое может быть передано методу clearIn_ terval(), позволяющему отменить запланированный запуск функции.
Методам setTimeout() и setInterval() в виде первого аргумента предпочтительнее передавать функцию, но допускается предавать строку JavaScript_кода. В этом случае программный код будет исполнен (один раз или несколько) через задан_ ный интервал времени. В старых броузерах, таких как IE 4, возможность пере_ дачи функций не поддерживается, потому необходимо передавать методам непо_ средственно JavaScript_код в виде строки.
Методы setTimeout() и setInterval() могут использоваться в самых разных ситуа_ циях. Если необходимо отобразить всплывающую подсказку, когда пользова_ тель задерживает указатель мыши на некотором элементе документа на полсе_ кунды или дольше, можно запланировать вывод подсказки с помощью метода setTimeout(). Если указатель мыши перемещается дальше без задержки, можно отменить вывод подсказки с помощью метода clearTimeout(). Порядок использо_ вания метода setTimeout() будет продемонстрирован позднее в примере 14.7. Всякий раз, когда возникает необходимость в выполнении анимации того или
14.2. Объекты Location и History
иного рода, обычно используется метод setInterval(), с помощью которого пла_ нируется периодический запуск программного кода, реализующего анимацию. Этот прием демонстрируется в примерах 14.4 и 14.6.
Один интересный способ регистрации функции, реализуемый методом setTime_ out(), заключается в том, чтобы запланировать ее запуск через 0 миллисекунд. При этом функция вызывается не сразу, а «как только такая возможность появ_ ляется». На практике метод setTimeout() планирует запуск функции лишь после того, как будут обработаны все события, ожидающие обработки, и завершится обновление текущего состояния документа. Даже обработчики событий (см. главу 17), которые пытаются получить или модифицировать содержимое документа (см. главу 15), иногда вынуждены использовать этот трюк, чтобы от_ ложить исполнение своего программного кода на тот момент, когда состояние документа стабилизируется.
Справочную информацию по этим функциям вы найдете в четвертой части кни_ ги в разделе, в котором описывается объект Window.