Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中的经典脚本v/s模块脚本_Javascript_Module_Es6 Modules - Fatal编程技术网

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模块”,这就是为什么我没有包含链接的原因。编辑。