JavaScript_инструкции, расположенные между тегами <script> и </script>, ис_ полняются в порядке их появления. Если в файле имеется более одного сцена_ рия, они исполняются в том порядке, в котором встречаются в документе (за ис_ ключением сценариев с атрибутом defer – такие сценарии IE исполняет не по по_ рядку). Исполнение JavaScript_кода является частью процесса загрузки и разбо_ ра документа.
Любой тег <script>, в котором отсутствует атрибут defer, может вызывать метод document.write() (подробно описан в главе 15). Текст, переданный этому методу, вставляется в документ непосредственно в то место, где находится сценарий в документе. Когда сценарий завершает работу, анализатор продолжает разбор HTML_документа, начиная с текста, который был выведен сценарием.
Сценарии могут присутствовать в разделах <head> или <body> HTML_документа. Обычно в разделе <head> определяются функции, вызываемые из других сцена_ риев. Здесь также могут объявляться и инициализироваться переменные, кото_ рые будут использоваться другим кодом. Обычно в сценариях раздела <head> до_ кумента определяется единственная функция, которая затем регистрируется как обработчик события onload для последующего исполнения. Вполне допусти_ мо, хотя на практике почти не встречается, обращение к методу document.write() в разделе <head>.
Сценарии в теге <body> документа могут делать все то же самое, что сценарии в теге <head>. Однако здесь часто можно встретить вызов метода document.write(). Сценарии, размещенные в теге <body> документа, могут также (с использованием приемов, описываемых в главе 15) обращаться к элементам и содержимому до_
13.5. Исполнение JavaScript*программ
кумента, находящимся перед сценарием, и изменять их. Однако, как объясняет_ ся в этой главе далее, в момент исполнения сценария, находящегося в теге <body>, доступность и готовность элементов документа не гарантируется. Если сценарий просто определяет некоторые функции и переменные для последую_ щего использования и не пытается изменить содержимое документа вызовом ме_ тода document.write() или каким_либо другим способом, в соответствии с обще_ принятыми соглашениями такой сценарий должен размещаться в теге <head>, а не <body>.
Как уже упоминалось, IE исполняет сценарии с атрибутом defer не в порядке их следования. Отложенные сценарии запускаются после того, как отработают все остальные сценарии и закончится полный разбор документа, но до того, как вы_ зван обработчик события onload.