前言
在前端开发的学习中,组件化和模块化思维是很重要的。在es6标准发布之前,js是没有模块化的概念的,也就是说原生js是无法将一个大型程序拆分成若干相互依赖的小模块的。
而es6针对这个问题提出了Module的概念,设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。
Module模块功能主要由两个命令构成:export 和 import。
export
export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口,可以使用as对要输出的变量进行重命名。
import
import用于在一个模块中加载另一个含有export接口的模块,可以使用as对引入的变量进行重命名。
import命令具有提升效果,会提升到整个模块的头部,首先执行。如果多次重复执行同一句import语句,那么只会执行一次,而不会执行多次。
也就是说,在使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)。
export 和 export default
1、二者均用于导出常量、函数、文件、模块等。在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用。
2、在一个文件或模块中,export、import可以有多个,export default仅有一个;
3、通过export方式导出,在导入时要加{ },export default则不需要。
4、在用import引入时,如果是用export方法定义的导出,必须要知道指定的变量名。而如果使用export default定义的时候,import可以起任意的名字。
import和export的复合写法
如果在一个模块之中,先输入后输出同一个模块,import语句可以与export语句写在一起。
但需要注意的是,写成一行以后,foo和bar实际上并没有被导入当前模块,只是相当于对外转发了这两个接口,导致当前模块不能直接使用foo和bar。
export { foo, bar } from 'my_module'; // 结合了export和import形式
//可以简单理解为
import { foo, bar } from 'my_module';
export { foo, bar };
模块的接口改名和整体输出,具名接口改为默认接口,默认接口也可以改名为具名接口也可以采用这种写法。
// 接口改名
export { foo as myFoo } from 'my_module';
来源:CSDN