首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CommonJS vs ES模块

CommonJS vs ES模块
EN

Stack Overflow用户
提问于 2020-06-17 11:36:42
回答 1查看 508关注 0票数 2

谁能解释一下为什么CommonJS是动态的,而ES是静态的?在这种情况下,动态和静态是什么意思?此外,我对解析时间和运行时间之间的区别也很困惑,希望有人也能解释一下。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-05-08 08:28:17

说“解析时间”有点学究,因为它指的是运行应用程序之前的时间,通常称为编译时间。模块允许在“解析时”运行之前,检查和映射与每个模块的文件位置、导入和导出相关的一些代码。在运行单个函数之前,每个函数都会被解析,这意味着它的名称和其他属性被组合在一起,以便其他模块可以导入它们。此时函数调用的结果和变量的值是未知的,但函数本身是已知的。

当使用ES导入时,导入的变量、函数等通常不会动态组装(有一个部分实现的提案文档here),这是在运行时发生的。使用ES,程序会显式地声明依赖关系,而不考虑任何程序差异。以不同的顺序导入并不重要。无论导入的代码是否可靠,结果都是相同的-即,在将任何代码评估为任何值之前,导入语句都是正确或不正确的。

因为CommonJS一次比ES一次评估更多的代码,所以如果以顺序的方式跟踪,就会知道更多。其中一个含义是,一个require语句的字符串中的代码可以有变量,从而使语句成为动态的,但ES不能。ES导出会被解析,但在计算import语句时,导入整个模块的其他模块将无法使用整个模块。

有一个MDN article可以更彻底地解释这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62421092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档