Javascript中的经典脚本v/s模块脚本
我正在查看Javascript中的经典脚本v/s模块脚本,javascript,module,es6-modules,Javascript,Module,Es6 Modules,我正在查看标记的异步和延迟属性的WHATWG规范,这时我看到了以下语句: 可以指定延迟或异步;可以指定async 我浏览了经典和模块脚本的WHATWG定义,但没有得到太多的清晰。有人能像我5岁一样向我解释一下Javascript中经典脚本和模块脚本的区别吗?正如你所知,经典脚本只是一个标准的Javascript脚本。模块脚本包含,即它使用(或:可以使用)import和export声明 发件人: JavaScript规范定义了模块的语法,以及 某些主机不可知的处理模型部分。本规范 定义其处理模型的
标记的异步和延迟属性的WHATWG规范,这时我看到了以下语句:
可以指定延迟
或异步
;可以指定async
我浏览了经典和模块脚本的WHATWG定义,但没有得到太多的清晰。有人能像我5岁一样向我解释一下Javascript中经典脚本和模块脚本的区别吗?正如你所知,经典脚本只是一个标准的Javascript脚本。模块脚本包含,即它使用(或:可以使用)import
和export
声明
发件人:
JavaScript规范定义了模块的语法,以及
某些主机不可知的处理模型部分。本规范
定义其处理模型的其余部分:模块系统的工作方式
通过script
元素将type
属性设置为
“模块”
,以及如何获取、解析和执行模块。
注意:尽管JavaScript规范以“脚本”而不是“模块”的形式表述,但一般来说,该规范以
条款
对
因为它们都使用script元素
另外,请看。以下是我从不同文章中注意到的差异。如果您想了解更多详细信息,请阅读web上的完整文章:
模块是单体的。它们将只加载和执行一次
模块可以使用导入和导出
模块总是在严格模式下执行
除非显式导出,否则所有对象(类、常量、函数、let或var)都是私有的
“this”的值在外部范围(非窗口)中未定义
模块是异步加载的
使用CORS加载模块。请参阅访问控制允许原点:*
默认情况下,模块不发送cookie和身份验证信息。请参阅crossorigin=“使用凭据”
导入在加载时静态解析,而不是在运行时动态解析
不允许使用html注释
这显然是正确的,但它提供的信息太少,我仍然感到不满意。OP提供的经典脚本链接是无用的文档(这可能是造成混乱的原因)。这个答案“简单地”给出了基本的机制。但我的问题——可能还有其他人的问题——是如何使用它?例如,在其他语言中,模块是可以导入的任何东西,脚本是可以执行的任何东西。但定义通常有点“模糊”。在新的JS中,他们似乎希望更严格。但最佳实践是什么?事实上,假设仍然是准确的,它更有帮助。@MikeWilliamson JS也使用了一个非常模糊的术语“模块”(“一些创建对象以向公众提供东西的代码”),但是在这个问题中,我们特别提到了ES6模块语法。@MikeWilliamson我只是假设现在每个人都知道“ES6模块”,这就是为什么我没有包含链接的原因。编辑。