为什么出口/进口申报必须在 es2015 中处于顶层?

2023-12-22

我在上一个项目中开始使用 es2015 和 babel 。当我尝试做的时候import or export inside if条件,我有一个错误'import' and 'export' may only appear at the top level。我看到很多这样的案例,并且效果很好require,但不适用于 es2015 模块。这个限制有什么理由吗?


JavaScript 对 ES6 模块进行静态分析。这意味着您无法动态执行导入或导出。阅读本文第 4.2 节了解更多信息 http://www.2ality.com/2014/09/es6-modules-final.html:

模块的结构是静态的意味着您可以在编译时(静态)确定导入和导出 - 您只需查看源代码,无需执行它。

采用这种方法的原因有很多,其中一些是为了让 JavaScript 为未来依赖于源文件可静态分析能力的功能做好准备,即macros and types(在上述文章中讨论过)。

另一个有趣的关于这个主题的文章 http://calculist.org/blog/2012/06/29/static-module-resolution/提及循环依赖 and 快速查找作为理由。

______

如果您想执行export在模块的某些嵌套块中,重新考虑如何编写模块并公开其 API/内部结构,因为几乎肯定没有必要。如果您目前在require在 ES5 代码中的嵌套块中使用模块。为什么不require / import在模块的顶部和consume它们的 API/内部结构在嵌套块中吗?至少从可读性的角度来看,这种方法的主要优点是您可以了解模块的依赖关系,而无需扫描其源代码require calls.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么出口/进口申报必须在 es2015 中处于顶层? 的相关文章

随机推荐