Классические скрипты v/s скрипты модуля в Javascript

Я просматривал спецификации WHATWG для async а также defer атрибуты для <script> тег, когда я увидел это утверждение:

Классические сценарии могут указывать defer или же async; Скрипты модуля могут указывать async,

Я прошел через определения WHATWG для классических и модульных сценариев, но на самом деле не получил особой ясности. Может ли кто-нибудь объяснить мне, как мне 5 лет, различия между классическими и модульными скриптами в Javascript?

1 ответ

Решение

Классический сценарий - это просто стандартный сценарий JavaScript, каким вы его знаете. Сценарий модуля - это тот, который содержит модуль ES6, т.е. он использует (или: может использовать) import а также export деклараций.

Из §8.1.3.8 Интеграция с модульной системой JavaScript:

Спецификация JavaScript определяет синтаксис для модулей, а также некоторые независимые от хоста части их модели обработки. Эта спецификация определяет остальную часть их модели обработки: как система модулей загружается с помощью script элемент с type атрибут установлен в "module"и как модули выбираются, разрешаются и выполняются. [JavaScript]

Примечание: хотя спецификация JavaScript говорит в терминах "сценарии" против "модулей", в целом эта спецификация говорит в терминах классических сценариев и сценариев модулей, поскольку оба они используют элемент сценария.

Также взгляните на https://blog.whatwg.org/js-modules.

Вот различия, которые я отметил из различных статей. Если вы хотите получить более подробную информацию, прочитайте полную статью в Интернете:

  1. Модули одиночные. Они будут загружены и выполнены только один раз.
  2. Модули могут использовать импорт и экспорт.
  3. Модули всегда выполняются в строгом режиме.
  4. Все объекты (класс, const, функция, let или var) являются частными, если явно не экспортированы.
  5. Значение "this" не определено во внешней области видимости (не в окне).
  6. Модули загружаются асинхронно.
  7. Модули загружаются с использованием CORS. см. Access-Control-Allow-Origin: *.
  8. Модули не отправляют файлы cookie и информацию об аутентификации по умолчанию. Смотрите crossorigin="use-credentials".
  9. импорт разрешается статически во время загрузки, а не динамически во время выполнения.
  10. html комментарии не допускаются.
Другие вопросы по тегам