Require的用法及短语 require的用法( 五 )




默认导入
在模块导出时,可能会存在默认导出 。同样的,在导入时可以使用import指令导出这些默认值 。
直接导入默认值:

Require的用法及短语 require的用法



也可以在命名空间导入和名称导入中,同时使用默认导入:

Require的用法及短语 require的用法



import使用示例

Require的用法及短语 require的用法



default关键字
Require的用法及短语 require的用法



在import的时候 , 可以这样用:

Require的用法及短语 require的用法



这个语法糖的好处就是import的时候,可以省去花括号{} 。
简单的说,如果import的时候,你发现某个变量没有花括号括起来(没有*号),那么你在脑海中应该把它还原成有花括号的as语法 。
所以,下面这种写法你也应该理解了吧:

Require的用法及短语 require的用法



import后面第一个$是{defalut as $}的替代写法 。
as关键字
as简单的说就是取一个别名,export中可以用 , import中其实可以用:

Require的用法及短语 require的用法



上面这段代码,export的时候 , 对外提供的接口是fun,它是a.js内部a这个函数的别名,但是在模块外面,认不到a,只能认到fun 。
import中的as就很简单,就是你在使用模块里面的方法的时候,给这个方法取一个别名 , 好在当前的文件里面使用 。之所以是这样,是因为有的时候不同的两个模块可能通过相同的接口 , 比如有一个c.js也通过了fun这个接口:

Require的用法及短语 require的用法



如果在b.js中同时使用a和c这两个模块,就必须想办法解决接口重名的问题,as就解决了 。
CommonJS中module.exports 与 exports的区别Module.exports
module.exports对象是由模块系统创建的 。有时这是难以接受的;许多人希望他们的模块成为某个类的实例 。为了实现这个,需要将期望导出的对象赋值给module.exports 。注意,将期望的对象赋值给exports会简单地重新绑定到本地exports变量上,这可能不是你想要的 。
exports变量是在模块的文件级别作用域内有效的,它在模块被执行前被赋于 module.exports 的值 。它有一个快捷方式 , 以便 module.exports.f = … 可以被更简洁地写成exports.f = … 。注意,就像任何变量,如果一个新的值被赋值给exports,它就不再绑定到module.exports(其实是exports.属性会自动挂载到没有命名冲突的module.exports.属性)
从Api文档上面的可以看出,从require导入方式去理解 , 关键有两个变量(全局变量module.exports,局部变量exports)、一个返回值(module.exports)

Require的用法及短语 require的用法



demo.js:

Require的用法及短语 require的用法



注意:每个js文件一创建,都有一个var exports = module.exports = {},使exports和module.exports都指向一个空对象 。
module.exports和exports所指向的内存地址相同
【Require的用法及短语 require的用法】首发文章,欢迎关注我的公众号:Web前端Talk

推荐阅读