type="module" の script は、async も defer も付けないときどう実行されるか?
選択肢を選ぶと解説が表示されます
正解: C. 文書のパース完了後に実行される(defer 相当。module は既定で遅延)
type="module" のスクリプトは、処理が遅延される。クラシック script で defer を付けたときと同様に、文書のパースが終わってから評価される。
そのため module に対して defer 属性を付けても効果はない(既定で遅延するため)。一方 async を付けると、依存関係の取得も含めて準備ができ次第実行され、出現順の保証は弱くなる。
クラシック script の既定(async / defer / type="module" なし)はパーサブロッキングで、取得・実行が終わるまで HTML のパースが止まる。module の既定挙動とは違う。
参考文献
- HTML script element - MDN —
type=moduleは処理が deferred、deferは module に効果なし - JavaScript modules - MDN — module の読み込みと実行モデル