前言
使用require时候,关于exports与module.exports总感觉似懂非懂,今天特意仔细了解了一下。
问题
1、require是异步还是同步
2、exports与module.exports的区别
1、require是异步还是同步
答案是同步的
2、exports与module.exports的区别
其实当js require一个文件时候,会给这个文件同时生成一个exports和module对象,而module又有一个exports属性,他们都指向同一块内存区域
console.log(module.exports===exports)
//true
下面用代码 进行一下演示
//b.js
console.log(exports);
console.log(module.exports);
exports.a='我是exports'
module.exports.a='我是module.exports'
//a.js
const b=require('./b');
console.log(b)
//{ a: '我是module.exports' }
代码中清楚看出当我们使用require时候,引用的是module.exports,而不是exports,有时候我们会看到下面的写法
exports=module.exports=something;
当module.exports指向新的地址,断开了与exports的联系,因此重新让他俩指向统一地址即可。
使用建议
1、当需要直接暴露出一个函数时候,只能使用module.exports=function(){}
2、暴露某一个参数时候使用module.exports.a和exports.a都可以。
综上为了防止使用混乱,建议直接使用module.exports