Ответ 1
Простой ответ:
В простом сценарии (теги являются частью исходного HTML-текста) браузер определенно выполняет их один за другим.
Подробное обсуждение с различными оговорками
JavaScript не обязательно однопоточный (это зависит от реализации вашего механизма JavaScript, например см. Веб-работники).
НО, индивидуальные теги <script>
выполняются последовательно.
Для справки см. JavaScript: The Definitive Guide
. Цитирование главы "12.3. Выполнение программ JavaScript":
Операторы JavaScript, которые появляются между и тегами, выполняются в порядке появления; когда в файле появляется более одного script, сценарии выполняются в том порядке, в котором они отображаются. Если script вызывает document.write(), любой текст, переданный этому методу, вставляется в документ сразу после закрывающего тега и анализируется парсером HTML после завершения работы script. Те же правила применяются к скриптам, включенным в отдельные файлы с атрибутом src.
Обратите внимание, что вышеизложенное относится только к "прямому" выполнению кода в тегах. На порядок может влиять:
-
setTimeout()
calls (duh) -
Динамическое прикрепление тегов
<script>
- см. последний раздел этого ответа.
Как caveat, обратите внимание, что код JavaScript, загруженный извне через <script src="xxxx" />
, все равно будет выполняться последовательно, НО, вполне возможно, что браузер будет ЗАГРУЗИТЬ параллельный код - зависит от реализации браузера (но по-прежнему планировать выполнение загруженных фрагментов кода в правильном порядке).
Это предостережение важно, если вы хотите иметь какой-то странный хак, тогда как URL-адрес источника JavaScript на самом деле является CGI script, который что-то делает, и вы пытаетесь зависеть от правильного порядка загрузки для логики в script.
Опять же, это не повлияет на порядок выполнения вашего браузера JS для этих script штук.
Однако гораздо важнее : если вы действительно добавляете теги <script>
с внешними источниками динамически (например, через вызов appendChild()
), согласно этот SO post, а также блог MSDN, пост был основан на, не IE браузеры НЕ гарантируют порядок выполнения! Это будет зависеть от того, какой код тега завершил загрузку первым!