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 字符串连接的性能问题(多浏览器)
Nov 18 Javascript
利用JQuery为搜索栏增加tag提示
Jun 22 Javascript
JS自动缩小超出大小的图片
Oct 12 Javascript
JavaScript函数详解
Nov 17 Javascript
JS逆序遍历实现代码
Dec 02 Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 jQuery
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
详解js创建对象的几种方法及继承
Apr 12 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
Apr 08 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
Jun 07 Javascript
VUE 单页面使用 echart 窗口变化时的用法
Jul 30 Javascript
八种Vue组件间通讯方式合集(推荐)
Aug 18 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文件怎么打开 如何执行php文件
2011/12/21 PHP
Parse正式发布开源PHP SDK
2014/08/11 PHP
Laravel中使用阿里云OSS Composer包分享
2015/02/10 PHP
PHP实现数据库的增删查改功能及完整代码
2018/04/18 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
js汉字转拼音实现代码
2013/02/06 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
Three.js基础部分学习
2017/01/08 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
python根据日期返回星期几的方法
2015/07/06 Python
Python 处理数据的实例详解
2017/08/10 Python
python实现闹钟定时播放音乐功能
2018/01/25 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例
2016/02/28 HTML / CSS
中国排名第一的外贸销售网站:LightInTheBox.com(兰亭集势)
2016/10/28 全球购物
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
职业生涯规划书的格式
2013/12/29 职场文书
班委竞选演讲稿
2014/04/28 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
二审代理词范文
2015/05/25 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
创业计划书之便利店
2019/09/05 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang