exports跟module.exports都指向的是同一个内存区域。(module.exports=exports)
1、当没有module.exports导出方法或者变量的时候,那么exports所收集的变量跟方法都会影响到module.exports(对象是按引用赋值),最终是导出的是module.exports。
2、当exports跟module.exports同时存在,那么只会导出module.exports所指向的内容。这就相当于exports跟module.exports切断了联系,module.exports指向了另外的一个内存区域。
exports.getA=()=>{
return 1;
}
exports.getB=()=>{
return 2;
}
module.exports={
getA(){
return 11;
}
}
exports.getC=()=>{//不会生效,不会将getC导出
return 3;
}
//此处注意,虽然module.exports跟exports指向同一个内存,但是在这儿的时候方法跟变量已经导入出去了,并不会执行到exports.getC这块,所以exports.getC不会影响到module.exports。
3、当只导出一个方法或者变量的时候。如下面所示:
let getA=()=>{
return 1;
}
module.exports=getA;
let getA=()=>{
return 1;
}
module.exports={
getA
}
其实都一样,注意一下,引入的时候到底是一个方法还是对象,取决于module.exports导出的是什么,如果是一个对象,则需要a.getA();这样调用,如果导出是一个方法直接调用a()。//此处假设a是引入的那个模块。