Сколько программ JavaScript выполняется для одной веб-страницы в браузере?

Программы JavaScript состоят из операторов и объявлений функций. Когда выполняется программа JavaScript, выполняются эти два шага:

  1. код сканируется на предмет объявлений функций и каждой функции. объявление "выполняется" (путем создания объекта функции), и создается именованная ссылка на эту функцию (так, чтобы эта функция могла быть вызвана изнутри оператора)

  2. операторы выполняются (оцениваются) последовательно (как они появляются в код)

Из-за этого отлично работает : Это приводит к выводу, что каждый элемент SCRIPT внутри HTML-кода веб-страницы представляет собой отдельную программу JavaScript, и каждый раз, когда анализатор HTML встречает элемент SCRIPT, он выполняет программу внутри этого элемента (а затем, когда программа выполняется, парсер переходит к HTML-коду, который следует за элементом SCRIPT).

Опять же, это действительно работает :

<script>
    function foo() {
        return;
    }
</script>
<script>
    foo();
</script>

Насколько я понимаю, глобальный объект (который служит в качестве объекта переменной в глобальный контекст выполнения) существует (и остается) всегда, поэтому первая программа JavaScript создаст объект функции и сделает ссылку на него, а затем вторая программа JavaScript будет использовать эту ссылку для вызова функции. Следовательно, все программы JavaScript (в пределах одной веб-страницы) «используют» один и тот же глобальный объект, и все изменения, внесенные в глобальный объект одной программой JavaScript, могут наблюдаться всеми программами JavaScript, которые запускаются впоследствии.

Теперь обратите внимание на это ...

<script>
    // assuming that foo is not defined
    foo();
    alert(1);
</script>

В приведенном выше случае вызов предупреждения не будет выполняться , потому что оператор "foo ()" выдает ошибку ReferenceError (которая нарушает работу всей программы JavaScript), и поэтому все последующие операторы не выполняются.

Однако в этом случае ...

<script>
    // assuming that foo is not defined
    foo();
</script>
<script>
    alert(1);
</script>

Теперь, вызов предупреждения действительно выполняется . Первая программа JavaScript выдает ошибку ReferenceError (и, как следствие, прерывает работу), но вторая программа JavaScript работает нормально. Конечно, браузер сообщит об ошибке (хотя он выполнял последующие программы JavaScript после того, как ошибка произошла).

Теперь я могу сделать следующие выводы:

  • каждый элемент SCRIPT в HTML-коде веб-страницы представляет собой отдельную программу JavaScript. Эти программы выполняются немедленно, как только парсер HTML обнаруживает их.
  • Все программы JavaScript на одной и той же веб-странице «используют» один и тот же глобальный объект. Этот глобальный объект существует всегда (с момента загрузки веб-страницы до ее уничтожения). Программы JavaScript могут манипулировать глобальным объектом, и все изменения, внесенные в глобальный объект одной программой JavaScript, можно наблюдать во всех последующих программах JavaScript.
  • если одна программа JavaScript выходит из строя (из-за того, что выдается ошибка), это не предотвращает последующие Программы JavaScript для выполнения.

Пожалуйста, проверьте этот пост и сообщите мне, если я что-то не так понял.

Кроме того, Я не нашел ресурсов, которые объясняли бы поведение, упомянутое в этом сообщении, и предполагаю, что разработчики браузеров должны были где-то публиковать такие ресурсы, поэтому, если вы знаете о них, предоставьте ссылки на них.

67
задан Cody Gray 5 February 2019 в 23:37
поделиться