ES6 | 用模块封装代码

1,921 阅读2分钟
原文链接: mp.weixin.qq.com

什么是模块

模块是自动运行在严格模式下并且没有办法退出运行的JavaScript代码。与共享一切框架相反的是,在模块顶部创建的变量不会自动被添加到全局共享作用域,这个变量仅在模块的顶级作用域中存在,而且模块必须导出一些外部代码可以访问的元素,如变量或函数。模块也可以从其他模块导入绑定。

模块可以是函数、数据、类,需要指定导出的模块名,才能被其他模块访问。

模块的导出

给数据、函数、类添加一个export,就能导出模块。

模块的导入

从模块中导出的功能,可以通过import关键字在另一个模块中访问。使用import关键字,导入分两种情况,一种是导入指定的模块,另外一种是导入全部模块。

1、导入指定的模块。

2、导入整个模块

默认模块的使用

如果给我们的模块加上default关键字,那么该js文件默认只导出该模块,你还需要把大括号去掉。

模块的使用限制

不能在语句和函数之内使用export关键字,只能在模块顶部使用,作为react和vue开发者的你,这个限制你应该很熟悉了。

在react中,模块顶部导入其他模块。

在vue中,模块顶部导入其他模块。

修改模块导入和导出名

有2种修改方式,一种是模块导出时修改,一种是导入模块时修改。

1、导出时修改:

2、导入时修改:

无绑定导入

当你的模块没有可导出模块,全都是定义的全局变量的时候,你可以使用无绑定导入。

模块:

无绑定导入:

浏览器加载模块

有用过webpack打包js模块的同学可能有经验,使用webpack打包了多个js文件,然后放到HTML使用script加载时,如果加载顺序不对,就会出现找不到模块的错误。

这是因为模块之间是有依赖关系的,就像你使用jQuery的时候,必须先加载jQuery的代码,才能使用jQuery提供的方法。

加载模块的方法,总是先加载模块1,再加载模块2,因为module类型默认使用defer属性。