美文网首页
exports与module.exports的区别

exports与module.exports的区别

作者: 季节小梅子 | 来源:发表于2019-06-03 14:55 被阅读0次

在node中,每个模块内部都有一个自己的module对象,该module对象中有一个成员叫exports,默认在代码的最后有一句return module.exports。
如果需要对外导出成员,只需要把导出的成员挂载到module.exports。
var module = {
exports:{}
}
...
return module.exports

然而每次导出接口成员的时候都通过module.exports.xxx太麻烦了,node为了简化操作,专门提供了一个变量:exports 等于module.exports,也就是说在模块中还有这么一句代码:
var exports = module.exports

console.log(exports == module.exports) //结果为true

那么就可以使用任意一方导出内部成员。

原理

exports是module.exports的一个引用

exports.foo = 'xxx'
//等价于
module.exports.foo = 'xxx'

当一个模块需要导出单个成员的时候,直接给exports赋值是不管用的,例如:

exports = 'hello'

因为exports是module.exports的一个引用,给exports重新赋值,就指向另一个对象了,丢失了引用关系。最后return module.exports,而不是return exports。
同理,给module.exports重新赋值,也会丢失引用关系。
二者丢失引用关系之后,还可以重新建立引用关系:exports = module.exports

相关文章

网友评论

      本文标题:exports与module.exports的区别

      本文链接:https://www.haomeiwen.com/subject/ymycxctx.html