7.export 与 import 的复合写法
如果在一个模块之中,先输入后输出同一个模块,import语句可以与export语句写在一起
模块的接口改名和整体输出,也可以采用这种写法
默认接口的写法如下
具名接口改为默认接口的写法如下
因为默认是输出变量default,这里直接将es6赋值给了default变量作为输出
8.import
前面介绍过,import命令会被 JavaScript 引擎静态分析,先于模块内的其他模块执行(叫做”连接“更合适)。所以,下面的代码会报错
上面代码中,引擎处理import语句是在编译时,这时不会去分析或执行if语句,所以import语句放在if代码块之中毫无意义,因此会报句法错误,而不是执行时错误。也就是说,import和export命令只能在模块的顶层,不能在代码块之中(比如,在if代码块之中,或在函数之中)
这样的设计,固然有利于编译器提高效率,但也因为其实静态加载导致无法在运行时再加载模块。从语法上,条件加载就不可能实现。如果import命令要取代 Node 的require方法,这就形成了一个障碍。因为require是运行时加载模块,import命令无法取代require的动态加载功能
上面的语句就是动态加载,require到底加载哪一个模块,只有运行时才知道。import语句做不到这一点
因此,有一个提案建议引入import()函数,完成动态加载
10.模块的继承
模块之间也可以继承
上面代码中的export ,表示再输出circle模块的所有属性和方法。注意,export 命令会忽略circle模块的default方法。然后,上面代码又输出了自定义的e变量和默认方法
这时,也可以将circle的属性或方法,改名后再输出
上面代码表示,只输出circle模块的area方法,且将其改名为circleArea
加载上面模块的写法如下
上面代码中的import exp表示,将circleplus模块的默认方法加载为exp方法