JavaScript. Подробное руководство, 6-е издание, стр. 187

<b>* не блокируется: она сразу же возвращает управление.</b>

<b>*/</b>

<b>function invoke(f, start, interval, end) {</b>

<b>  if (!start) start =0; //По умолчанию через 0 мс</b>

<b>  if (arguments.length &lt;= 2) // Случай однократного вызова</b>

<b>    setTimeout(f, start); // Вызвать 1 раз через start мс.</b>

<b>  else { // Случай многократного вызова</b>

<b>    setTimeout(repeat, start); // Начать вызовы через start мс </b>

<b>    function repeat() { // Планируется на вызов выше</b>

<b>      var h = setlntervalQ, interval); // Вызывать f через interval мс.</b>

<b>      // Прекратить вызовы через end мс, если значение end определено </b>

<b>      if (end) setTimeout(function() { clearlnterval(h); }, end);</b>

<b>    }</b>

<b>  }</b>

<b>}</b>

По исторически сложившимся причинам в первом аргументе методам

<b>setTimeout()</b>
и
<b>setlnterval()</b>
допускается передавать строку. В этом случае строка будет интерпретироваться (как с применением функции
<b>eval()</b>
) через указанный интервал, времени. Спецификация HTML5 (и все броузеры, кроме IE) допускает передавать методам
<b>setTimeout()</b>
и
<b>setlnterval()</b>
дополнительные аргументы после первых двух. Все эти дополнительные аргументы будут передаваться функции, вызов которой планируется этими методами. Однако если требуется сохранить совместимость с IE, эту возможность использовать не следует.

Если методу

<b>setTimeout()</b>
указать величину интервала 0 миллисекунд, указанная функция будет вызвана не сразу, а «как только такая возможность появится, т. е. как только завершат работу все обработчики событий.

14.2. Адрес документа и навигация по нему

Свойство

<b>location</b>
объекта
<b>Window</b>
ссылается на объект
<b>Location</b>
, представляющий текущий URL-адрес документа, отображаемого в окне и определяющий методы, инициирующие загрузку нового документа в окно.

Свойство

<b>location</b>
объекта
<b>Document</b>
также ссылается на объект
<b>Location</b>
:

<b>window.location === document.location // всегда верно</b>

Кроме того, объект

<b>Document</b>
имеет свойство
<b>URL</b>
, хранящее статическую строку с адресом URL документа. При перемещении по документу с использованием идентификаторов фрагментов (таких как «#table-of-contents») внутри документа объект
<b>Location</b>
будет обновляться, отражая факт перемещения, но свойство document. URL останется неизменным.

14.2.1. Анализ URL

Свойство

<b>location</b>
окна является ссылкой на объект
<b>Location</b>
и представляет URL-адрес документа, отображаемого в данный момент в текущем окне. Свойство
<b>href</b>
объекта
<b>Location</b>
- это строка, содержащая полный текст URL-адреса. Метод
<b>toString()</b>
объекта Location возвращает значение свойства
<b>href</b>
, поэтому в контекстах, где неявно подразумевается вызов метода
<b>toString(),</b>
вместо конструкции
<b>location.href</b>
можно писать просто
<b>location</b>
.

Другие свойства этого объекта, такие как

<b>protocol, host, hostname, port, pathname, search</b>
и
<b>hash</b>
, определяют отдельные части URL-адреса. Они известны как свойства «декомпозиции URL» и также поддерживаются объектами
<b>Link</b>
(которые создаются элементами
<b>&lt;а&gt;</b>
и
<b>&lt;агеа&gt;</b>
в HTML-документах). Полное описание объектов
<b>Location</b>
и
<b>Link</b>
приводится в четвертой части книги.

Свойства

<b>hash</b>
и
<b>search</b>
объекта
<b>Location</b>
представляют особый интерес. Свойство
<b>hash</b>
возвращает «идентификатор фрагмента» из адреса URL, если он имеется: символ решетки (#) со следующим за ним идентификатором. Свойство
<b>search</b>
содержит часть URL-адреса, следующую за вопросительным знаком, если таковая имеется, включая сам знак вопроса. Обычно эта часть URL-адреса является строкой запроса. В целом эта часть URL-адреса используется для передачи параметров и является средством встраивания аргументов в URL-адрес. Хотя эти аргументы обычно предназначены для сценариев, выполняющихся на сервере, нет никаких причин, по которым они не могли бы также использоваться в страницах, содержащих JavaScript-код. В примере 14.2 приводится определение универсальной функции
<b>urlArgs(),</b>
позволяющей извлекать аргументы из свойства
<b>search</b>
URL-адреса. В примере используется глобальная функция
<b>decodeURIComponent(),</b>
имеющаяся в клиентском JavaScript. (Смотрите справочную статью «Global» в третьей части книги.)

Пример 14.2. Извлечение аргументов из строки search URL-adpeca

<b>/*</b>

<b>* Эта функция выделяет в URL-адресе разделенные амперсандами</b>

<b>* пары аргументов имя/значение из строки запроса. Сохраняет эти пары</b>