web-dev-qa-db-ja.com

Javascriptのクラシックスクリプトv / sモジュールスクリプト

このステートメントを見たとき、私はasyncおよびdefer属性の<script>タグのWHATWG仕様を調べていました。

クラシックスクリプトdeferまたはasyncを指定できます。 モジュールスクリプトasyncを指定できます。

classicおよびmoduleスクリプトのWHATWG定義を確認しましたが、実行しませんでしたあまり明確になりません。私が5歳のように誰かが私に説明してもらえますか?classicmoduleJavascriptのスクリプト?

17
nikjohn

クラシックスクリプトは、ご存知のとおり、単なる標準のJavaScriptスクリプトです。 モジュールスクリプトは、 ES6モジュール を含むスクリプトです。つまり、importおよびexport宣言を使用します(または使用できます)。

から §8.1.3.8JavaScriptモジュールシステムとの統合

JavaScript仕様では、モジュールの構文と、処理モデルのホストに依存しない部分が定義されています。この仕様は、残りの処理モデルを定義します。つまり、script属性が"module"に設定されたtype要素を介したモジュールシステムのブートストラップ方法、およびモジュールのフェッチ、解決、実行方法です。 [JAVASCRIPT]

注:JavaScript仕様は「スクリプト」と「モジュール」の観点から説明していますが、一般に、この仕様は クラシックスクリプト)の観点から説明しています。モジュールスクリプト 、どちらもスクリプト要素を使用しているため。

https://blog.whatwg.org/js-modules もご覧ください。

7
Bergi

これが私がさまざまな記事から指摘した違いです。詳細が必要な場合は、Web上の完全な記事をお読みください。

  1. モジュールはシングルトンです。それらは一度だけロードされ実行されます。
  2. モジュールはインポートとエクスポートを使用できます。
  3. モジュールは常に厳密モードで実行されます。
  4. すべてのオブジェクト(class、const、function、let、またはvar)は、明示的にエクスポートされない限りプライベートです。
  5. 「this」の値は、(ウィンドウではなく)外部スコープでは未定義です。
  6. モジュールは非同期でロードされます。
  7. モジュールはCORSを使用してロードされます。 Access-Control-Allow-Origin:*を参照してください。
  8. モジュールは、デフォルトではCookieと認証情報を送信しません。 crossorigin = "use-credentials"を参照してください。
  9. インポートは、実行時に動的に解決されるのではなく、ロード時に静的に解決されます。
  10. htmlコメントは許可されていません。
9
cquezel