Javascript中的经典脚本v / s模块脚本

时间:2016-09-23 04:25:07

标签: javascript module es6-modules

当我看到此声明时,我正在查看sc.parallelize()标记的asyncdefer属性的WHATWG规范:

  

Classic scripts可以指定<script>defer; module scripts可以指定async

我仔细阅读了经典模块脚本的WHATWG定义,但并未真正清晰明了。有人可以像我一样向我解释Javascript中经典模块脚本之间的区别吗?

2 个答案:

答案 0 :(得分:4)

以下是我从多篇文章中注意到的区别。如果您需要更多详细信息,请阅读网络上的完整文章:

  1. 模块是单例的。它们将仅被加载和执行一次。
  2. 模块可以使用导入和导出。
  3. 模块始终以严格模式执行。
  4. 除非明确导出,否则所有对象(类,const,函数,let或var)都是私有的。
  5. “ this”的值在外部范围(不是窗口)中是未定义的。
  6. 模块异步加载。
  7. 使用CORS加载模块。请参阅Access-Control-Allow-Origin:*。
  8. 默认情况下,模块不发送cookie和身份验证信息。请参阅crossorigin =“ use-credentials”。
  9. 导入在加载时静态解决,而不是在运行时动态解决。
  10. 不允许
  11. html注释。

答案 1 :(得分:3)

经典脚本只是您所知道的标准JavaScript脚本。 模块脚本是包含ES6 module的脚本,即它使用(或:可以使用)importexport声明。

来自§8.1.3.8 Integration with the JavaScript module system

  

JavaScript规范定义了模块的语法,以及   一些与主机无关的处理模型部分。这个规范   定义其处理模型的其余部分:模块系统如何   通过设置为script属性的type元素进行自举   "module",以及如何获取,解析和执行模块。   [JAVASCRIPT]

     

注意:虽然JavaScript规范是用&#34;脚本&#34;来说的。与&#34;模块&#34;,通常这个规范说明   classic scripts的条款   与module scripts对比,   因为他们都使用脚本元素。

另请查看https://blog.whatwg.org/js-modules