Kev*_*ler 8 javascript ecmascript-6
我听说es6中不允许动态出口/进口.
本网站使用该示例export default 5 * 7;,就好像它是合法的静态导出.这似乎是合理的,因为它清楚地评估了35的静态值,但我想知道现在究竟什么是静态导出.
本规范使用的export default Backbone.Router.extend({...});是好像是合法的静态出口.这对我来说似乎很可疑,因为它似乎是对我的动态导出(导出函数调用的结果).
第二个例子只导出函数调用的结果,这是静态的.该函数仅调用一次,因此每次导入时结果始终相同.
举例说明:
f.js
function f() {
return 2 * Math.random();
}
export default f(); // Is called, before the export is defined. Result: 1.23543
Run Code Online (Sandbox Code Playgroud)
i1.js
import f from 'f';
console.log(f); // 1.23543
Run Code Online (Sandbox Code Playgroud)
i2.js
import f from 'f';
console.log(f); // 1.23543 as well
Run Code Online (Sandbox Code Playgroud)
所有导出在ES6中都是静态的,也就是说,它们的导出名称在导出模块中只解析为一个变量绑定,这可以在评估模块代码之前通过单个外观确定.
模块不能通过执行代码动态添加或删除导出,导出名称列表由声明修复.
此变量是保持常量还是函数调用的结果无关紧要,它是否包含原始值或对象.它甚至不需要是常量,变量的内容可能随时间而变化(参见此处的示例).
import语句中的所有导入也是静态的,这意味着您可以在不执行任何模块代码的情况下浏览依赖关系图.
一个动态的进口是由以模块加载的显式调用来完成.这样的负载可能取决于模块的控制流程,并且可能因运行而不同.代码需要手动处理进程的异步和潜在的错误.