谈谈导出模块两种方式的关系

发现了一个很奇怪的现象,工作中,大部分人使用的导出方法都会用module.exports,今天偶然看到有人用exports导出,
为了防止在阅读其它人的代码时,可能会遇到这两种不同的写法。所以我们还是有必要了解一下.

导出的两种方式

● exports
● module.exports
代码演示:

// 定义方法,常量
const myPI = 3.14
const add = (a,b) => a + b;

// 导出,两种方法任意都可以
// 方法一:
exports.myPI = myPI
exports.add = add

// 方法二:
module.exports.myPI = myPI
module.exports.add = add

// 方法二(变形)
module.exports  = {
    myPI,
    add
}

根据以上代码我们打印可以知道他们都是一个对象

那么他们俩有什么关系呢?

初始exports和module.exports是指向同一块内存区域,其内容都是一个空对象。
即:

exports === module.exports // 输出是 true

所以 写法1==写法2

 // 写法1 mymodule.js
 exports.f = function(){ }
 exports.pi = 3.1415926
  // 写法2 mymodule.js
 module.exports.f = function(){ }
 module.exports.pi = 3.1415926

在定义模块时
如果直接给exports对象赋值(例如:exports={a:1,b:2}),此时,exports就不会再指向module.exports,而转而指向这个新对象,此时,exports与module.exports不是同一个对象。

注意: 在引入某模块时:以该模块代码中module.exports指向的内容为准。

看图或许感受更加直观:
在这里插入图片描述

那么这就是exports和module.exports的关系了
找到几个经典的题型 一起来看看吧

在这里插入图片描述
这属于值类型的引入,我们都知道exports和module.exports开始都指向一个空数组,此时题干的意思就是讲exports.a=1和module.exports.b=2依次代入数组,
所以最终答案是 {a:1,b:2}
在这里插入图片描述

此时的这题和第一题的区别就是这是一个引用类型的引入,由以上图文得知:

在引入某模块时:以该模块代码中module.exports指向的内容为准。

所以这里的答案是 {b:2}
在这里插入图片描述
今天分享就是这些了
在这里插入图片描述

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值