Классические скрипты 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.
Вот различия, которые я отметил из различных статей. Если вы хотите получить более подробную информацию, прочитайте полную статью в Интернете:
- Модули одиночные. Они будут загружены и выполнены только один раз.
- Модули могут использовать импорт и экспорт.
- Модули всегда выполняются в строгом режиме.
- Все объекты (класс, const, функция, let или var) являются частными, если явно не экспортированы.
- Значение "this" не определено во внешней области видимости (не в окне).
- Модули загружаются асинхронно.
- Модули загружаются с использованием CORS. см. Access-Control-Allow-Origin: *.
- Модули не отправляют файлы cookie и информацию об аутентификации по умолчанию. Смотрите crossorigin="use-credentials".
- импорт разрешается статически во время загрузки, а не динамически во время выполнения.
- html комментарии не допускаются.