Node 中的 export 和 module.export 的区别

前言

最新在学习 Node,学到模块化,变量导出的时候可以用如下几个方法

// 第一种方法:把变量包裹在对象中,并把对象赋值给 module.exports
module.exports = {
    a
}
// 第二种方法:把变量挂在 export 上
exports.a = 1; 

那么问题来了,如果我这样做呢?

const a = 1;
exports = {
    a
}

打印的结果如下,看来 直接修改 export 是不行的,那么为什么?
在这里插入图片描述

我的疑问:为什么修改了export 的值,变量不能导出呢?

探索过程

首先找了很多博客,看不懂😌…

索性换了google,搜到了一篇博文,其中的这三句话非常有用:

  1. module.exports 初始值为一个空对象 {}
  2. exports 是指向 module.exports 的一个引用,(缩句:exports 是个引用
  3. require() 返回的是 module.exports 而不是 exports关键

所以关键是module.exports 的值改了没?你改exports的值是没有用滴

没错,就是这么简洁。


总结

  • 我是不知道 require() 返回的是 module.exports 这个知识点。

到这里就可以不用看了哈~


几个问题(个人的碎碎念,因为基础不好,傻掉了,走了个弯路)

  • 那么export === module.export 吗?如果等于,为什么等于呢?
    答:Node 帮你搞了一手~,所以说 exportsmodule.exports 的一个引用

  • 那么知乎的这个例子我可以尝试解释一下,代码如下:
    在这里插入图片描述

  • p 等于 undefined 是因为此时的 module.exports 是1 了,也就是test 等于1了,1.add 是个啥?找不到吧,undefined

  • b 自然是 1,因为 require 指向的是 module.exports

这里我又提出一个疑问:既然 exportsmodule.exports 的一个引用,那么 exports一直指向 module.exports 的吗?如果是这样的话,那么这个语句 export === module.export 一直为true 吗?

我又试验了一下
在这里插入图片描述

// b.js
exports.add = 100;
console.log(exports === module.exports);
console.log("exports:>>", exports);
console.log("module.exports:>>", module.exports);
console.log("************************************");

module.exports = 1;
console.log(exports === module.exports);
console.log("exports:>>", exports);
console.log("module.exports:>>", module.exports);
// a.js
let test = require("./b");
let p = test.add;   
let b = test;   
console.log("p的值是:" + p);
console.log("b的值是:" + b);
// terminal
module.exports:>> { add: 100 }
wangzhongqing@wangzhongqingdeMacBook-Pro testDir % node a.js
true
exports:>> { add: 100 }
module.exports:>> { add: 100 }
************************************
false
exports:>> { add: 100 }
module.exports:>> 1
p的值是:undefined
b的值是:1

哎这跟我理解的不一样啊,我理解的:既然 exportmodule.export 的一个引用,那么 module.export 改了的话,export 也应该改啊 。

其实是我没搞清楚一个问题:改了什么?改的是指向,还是指向的内容

我说的那个场景的情况是:exportsmodule.exports 所指向的那个地址的内容变了,而此时 module.exports 的指向已经变了

类似如下的例子
在这里插入图片描述
回头看我那个问题,问的也很蠢啊,哎就是菜,哎菜也爱玩~

参考

1.知乎(没看懂的)

2.Node官网的export

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值