ES Module
经我实际测试:
- 函数声明提升到最上面(包括export后跟的函数声明)
- 提升的import语句紧随其后(开启异步并行下载文件,只加载一次)
- 其他语句顺序不变
- 编译时就通过 import 和 export 确定依赖关系,只是一个接口而已,没运行。
而运行时:
- 按上面的顺序运行,import后就得去执行对应文件,所以当前文件尚未执行完毕(类似移交JS执行权)
- 如果此时遇到循环引用,因为不会重复加载与运行,故只能拿到前文件的export的函数声明,因为只有它能够提前到import语句的前面。你如果引用前文件的其他的导出值(表达式的形式),就会报错,“不能在初始化之前进入该变量”。(其实这里有点像 require 了,只是import提升导致一些不同)