繁体   English   中英

为什么出口/进口申报必须在2015年达到顶级水平?

[英]Why must export/import declarations be on top level in es2015?

我在上一个项目中开始使用es2015和babel。 当我尝试在条件下进行importexport if ,我有一个错误'import' and 'export' may only appear at the top level 我看到很多情况,它适用于require ,但不适用于es2015模块。 这种限制有什么理由吗?

JavaScript在ES6模块上执行静态分析。 这意味着您无法动态执行导入或导出。 有关更多信息,请阅读本文的第4.2节

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

这种方法有很多原因,其中一些原因是为未来的功能准备JavaScript,这些功能依赖于源文件可静态分析的能力,即类型 (在前面提到的文章中讨论过)。

关于该主题的一篇有趣的文章提到循环依赖快速查找作为原因。

______

如果要在模块的某个嵌套块中执行export ,请重新考虑如何编写模块并公开其API /内部,因为几乎肯定不需要。 如果您当前require ES5代码中的嵌套块中的模块,则同样如此。 为什么不在模块顶部require / import并在嵌套块中使用它们的API /内部? 至少从可读性的角度来看,这种方法的主要优点是,您可以了解模块的依赖关系,而无需扫描其源以进行require调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM