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 相关文章推荐
extjs form textfield的隐藏方法
Dec 29 Javascript
JS+JSP checkBox 全选具体实现
Jan 02 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
Feb 10 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
jquery中animate的stop()方法作用实例分析
Jan 30 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
Feb 18 Javascript
Node.js中的http请求客户端示例(request client)
May 04 Javascript
Js中async/await的执行顺序详解
Sep 22 Javascript
jsonp实现百度下拉框功能的方法分析
May 10 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
Jan 05 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
Apr 28 Javascript
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
php数组去重的函数代码
2013/02/03 PHP
php 启动报错如何解决
2014/01/17 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
php基于openssl的rsa加密解密示例
2016/07/11 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
JS读取cookies信息(记录用户名)
2012/01/10 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
json属性名为什么要双引号(个人猜测)
2014/07/31 Javascript
jquery实现鼠标点击后展开列表内容的导航栏效果
2015/09/14 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
2016/01/27 Javascript
利用jQuery实现CheckBox全选/全不选/反选的简单代码
2016/05/31 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Python简单实现自动删除目录下空文件夹的方法
2017/08/29 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
python实现决策树分类算法
2017/12/21 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
HTML 5.1来了 9月份正式发布 更新内容预览
2016/04/26 HTML / CSS
保密普查工作实施方案
2014/02/25 职场文书
党员创先争优活动总结
2014/05/04 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android