Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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 为什么出口/进口申报必须在es2015中处于最高水平?_Javascript_Babeljs_Ecmascript 6 - Fatal编程技术网

Javascript 为什么出口/进口申报必须在es2015中处于最高水平?

Javascript 为什么出口/进口申报必须在es2015中处于最高水平?,javascript,babeljs,ecmascript-6,Javascript,Babeljs,Ecmascript 6,在上一个项目中,我开始使用es2015和babel。当我尝试在if条件内执行导入或导出时,我出现了一个错误“导入”和“导出”可能只出现在顶层。我看到很多这样的情况,它在require中运行良好,但在es2015模块中却不起作用。这种限制有什么原因吗?JavaScript对ES6模块执行静态分析。这意味着您无法动态执行导入或导出: 模块的结构是静态的,这意味着您可以在编译时(静态地)确定导入和导出—您只需查看源代码,而不必执行它 采用这种方法有很多原因,其中一些原因是为将来的特性准备JavaScr

在上一个项目中,我开始使用es2015和babel。当我尝试在
if
条件内执行
导入
导出
时,我出现了一个错误
“导入”和“导出”可能只出现在顶层
。我看到很多这样的情况,它在
require
中运行良好,但在es2015模块中却不起作用。这种限制有什么原因吗?

JavaScript对ES6模块执行静态分析。这意味着您无法动态执行导入或导出:

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

采用这种方法有很多原因,其中一些原因是为将来的特性准备JavaScript,这些特性依赖于源文件的静态分析能力,即宏和类型(在前面的文章中讨论)

另一个有趣的原因是循环依赖和快速查找

______


如果您想在模块的某个嵌套块内执行
导出
,请重新考虑如何编写模块并公开其API/内部,因为这几乎肯定不是必需的。如果您当前需要在ES5代码的嵌套块中设置模块,则情况也是如此。为什么不
在模块顶部导入
,并在嵌套块中使用它们的API/内部构件?至少从可读性的角度来看,这种方法的主要优点是,您可以知道模块的依赖关系,而无需扫描其源代码以查找
require
调用。

因为es2015模块是同步加载的?允许嵌套的
导出
s意味着导出可能会推迟到该行被称为dbabel eslint时。不仅如此,它们在概念上是被提升的,因为模块依赖关系在任何代码执行之前都已被完全处理,而在
if
中导入的概念将需要执行。@loganfsmyth这是一种更简洁的表达方式:-)