module.exports和exports

本文探讨了Node.js中module.exports与exports的区别,通过实例解释了二者如何引用同一个对象及改变时的影响,帮助理解模块导出机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于module.exports和exports在模块化编程中的差异,我们先来看看两个伪代码。

第一个代码是node官方文档的,她的意思是exports变量是一个指向module.exports的引用,当对exports赋值之后,他不再指向原来的那个值了。

	

再来看另外一个稍微详细的代码,两者意思都差不多。

	

最初exports={},通过这句代码module = {exports:exports},我们知道他们都指向了一个{}对象,当module.exports指向新的对象时,exports变量就断开了与module.exports的引用通过exports=module.exports让exports重新指向module.exports的引用。这里感觉很绕,不过没关系,因为node官方推荐:当我们觉得exports和module.exports很难琢磨时,我们只用module.exports对外暴露方法。

     我们看如下代码:  

module.exports.name=123;
console.info(exports);
console.info("---------------------------------");
console.info(module);
      运行结果如下:

{ name: 123 }
---------------------------------
Module {
  id: '.',
  exports: { name: 123 },
  parent: null,
  filename: 'E:\\nodespace\\hello\\public\\src\\js\\module.js',
  loaded: false,
  children: [],
  paths: 
   [ 'E:\\nodespace\\hello\\public\\src\\js\\node_modules',
     'E:\\nodespace\\hello\\public\\src\\node_modules',
     'E:\\nodespace\\hello\\public\\node_modules',
     'E:\\nodespace\\hello\\node_modules',
     'E:\\nodespace\\node_modules',
     'E:\\node_modules' ] }
这句代码说明我们对module.exports.name设置值后,exports也会跟着变化,当我们通过module.exports={}导出时,exports并不会跟着改变。

exports.name=123;
module.exports={name:234};
console.info(exports);
console.info("---------------------------------");
console.info(module);
输出结果:

{ name: 123 }
---------------------------------
Module {
  id: '.',
  exports: { name: 234 },
  parent: null,
  filename: 'E:\\nodespace\\hello\\public\\src\\js\\module.js',
  loaded: false,
  children: [],
  paths: 
   [ 'E:\\nodespace\\hello\\public\\src\\js\\node_modules',
     'E:\\nodespace\\hello\\public\\src\\node_modules',
     'E:\\nodespace\\hello\\public\\node_modules',
     'E:\\nodespace\\hello\\node_modules',
     'E:\\nodespace\\node_modules',
     'E:\\node_modules' ] }
这两个例子其实就说明了对象在引用传值时的问题,如果a=b={name:123};这时候b.name=234,这时候a.name也会变化,因为他们指向了同一个引用,如果这时候b={name:234},那么a.name是不会跟着改变的。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值