module.exports 与 exports的区别

这个问题近半年看过三次,一直都是迷迷糊糊的,今天看朴大以及一些stack上面的资料终于算是明白点了,先记录一下以免忘记.

大白话: exports 只是 module.exports 的引用,他们都指向内存中的同一个地址.

node在加载模块的时候,每个模块默认有一个module对象,该对象有个属性exports;初始值是空对象{},可以认为require引入模块调用的是module.exports最终指向的对象.

—-那么怎么理解exports只是module.exports的引用呢.可以这样来看

   var module.exports={},
       exports=module.exports; //此时exports 和module.exports指向内存中同一块区域

   //我们导出一个函数当使用exports的时候.像这样:
   exports=function(){
        console.log('export function');
    }
   //此时 exports指向的已经是内存中另一块区域了,它已经和module.exports={},赋值的对象没有任何关系,此时他们关系如此密切的两个好基友再无瓜葛。我们使用require()然后调用会报错。

    //这种情况导出就可以工作很好理解,就是给最初的对象增加了一个属性sayHello而已.
    exports.sayHello=function(){
        console.log('hello');
    }

实际上就类似于java中 引用类型 赋值 与修改.

在stackoverflow 看到特别6的解释 请看:

var module = { exports: {} };
var exports = module.exports;

// your code

return module.exports;

参考资料请点击:
https://cnodejs.org/topic/5231a630101e574521e45ef8

difference between module.exports and exports

转载于:https://www.cnblogs.com/dongguapifly/p/10627127.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值