Node.js 中exports 和 module.exports 的区别


Posted in Javascript onMarch 14, 2017

Node.js 中exports 和 module.exports 的区别

require 用来加载代码,而 exports 和 module.exports 则用来导出代码。但很多新手可能会迷惑于 exports 和 module.exports 的区别,为了更好的理解 exports 和 module.exports 的关系,我们先来巩固下 js 的基础。示例:

test.js

var a = {name: 1};
var b = a;

console.log(a);
console.log(b);

b.name = 2;
console.log(a);
console.log(b);

var b = {name: 3};
console.log(a);
console.log(b);

运行 test.js 结果为:

{ name: 1 }
{ name: 1 }
{ name: 2 }
{ name: 2 }
{ name: 2 }
{ name: 3 }

解释:a 是一个对象,b 是对 a 的引用,即 a 和 b 指向同一块内存,所以前两个输出一样。当对 b 作修改时,即 a 和 b 指向同一块内存地址的内容发生了改变,所以 a 也会体现出来,所以第三四个输出一样。当 b 被覆盖时,b 指向了一块新的内存,a 还是指向原来的内存,所以最后两个输出不一样。

明白了上述例子后,我们只需知道三点就知道 exports 和 module.exports 的区别了:

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

现在我们来看 Node.js 官方文档的截图:

Node.js 中exports 和 module.exports 的区别

我们经常看到这样的写法:

exports = module.exports = somethings

上面的代码等价于:

module.exports = somethings
exports = module.exports

原理很简单,即 module.exports 指向新的对象时,exports 断开了与 module.exports 的引用,那么通过 exports = module.exports 让 exports 重新指向 module.exports 即可。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
javascript小数四舍五入多种方法实现
Dec 23 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
Jan 10 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 Javascript
jQuery 监控键盘一段时间没输入
Apr 22 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
Aug 01 Javascript
Node.js connect ECONNREFUSED错误解决办法
Sep 15 Javascript
JS封装通过className获取元素的函数示例
Dec 20 Javascript
JavaScript输入框字数实时统计更新
Jun 17 Javascript
4个顶级JavaScript高级文本编辑器
Oct 10 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
JS检测数组类型的方法小结
Mar 14 #Javascript
轻松理解JavaScript闭包
Mar 14 #Javascript
微信小程序 页面跳转及数据传递详解
Mar 14 #Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 #Javascript
微信小程序 动态绑定数据及动态事件处理
Mar 14 #Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
Mar 14 #Javascript
vuejs响应用户事件(如点击事件)
Mar 14 #Javascript
You might like
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
php 把数字转换成汉字的代码
2015/07/21 PHP
thinkPHP线上自动加载异常与修复方法实例分析
2016/12/01 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
js隐藏与显示回到顶部按钮及window.onscroll事件应用
2013/01/25 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
Angular工具方法学习
2016/12/26 Javascript
ES6新特性之字符串的扩展实例分析
2017/04/01 Javascript
简单实现js放大镜效果
2017/07/24 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
[19:26]TNC vs EG (BO3)
2018/06/07 DOTA
Python简单日志处理类分享
2015/02/14 Python
Django学习笔记之Class-Based-View
2017/02/15 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Python之pymysql的使用小结
2019/07/01 Python
python 函数中的参数类型
2020/02/11 Python
如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)
2020/04/22 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
美国演唱会订票网站:Ticketmaster美国
2017/10/05 全球购物
RealTek面试题
2016/06/28 面试题
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
化学相关工作求职信
2013/10/02 职场文书
中学自我评价
2014/01/31 职场文书
幼儿园标语大全
2014/06/19 职场文书
爬山的活动方案
2014/08/16 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
母亲节寄语大全
2015/02/27 职场文书