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 相关文章推荐
XMLHttpRequest处理xml格式的返回数据(示例代码)
Nov 21 Javascript
jquery实现全选功能效果的实现代码
May 05 Javascript
js字符串截取函数slice、substring和substr的比较
May 17 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
Dec 14 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
[js高手之路]原型式继承与寄生式继承详解
Aug 28 Javascript
javaScript实现复选框全选反选事件详解
Nov 20 Javascript
karma+webpack搭建vue单元测试环境的方法示例
May 24 Javascript
jQuery实现模拟搜索引擎的智能提示功能简单示例
Jan 27 jQuery
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 Javascript
详解auto-vue-file:一个自动创建vue组件的包
Apr 26 Javascript
tracking.js实现前端人脸识别功能
Apr 16 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
DSP接收机前端设想
2021/03/02 无线电
php实现的短网址算法分享
2014/06/20 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
php 读取输出其他文件的实现方法
2016/07/26 PHP
php查询及多条件查询
2017/02/26 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
jQuery中的val()示例应用
2014/02/26 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
2016/06/12 Javascript
Vue.js创建Calendar日历效果
2016/11/03 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
微信小程序 点击切换样式scroll-view实现代码实例
2019/10/11 Javascript
Vue中多元素过渡特效的解决方案
2020/02/05 Javascript
javascript实现倒计时效果
2020/02/17 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
vue 页面跳转的实现方式
2021/01/12 Vue.js
[45:46]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS DT
2014/05/23 DOTA
python 运算符 供重载参考
2009/06/11 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
2020/03/13 Python
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
Ruby如何创建一个线程
2013/03/10 面试题
旷课检讨书大全
2014/01/21 职场文书
志愿者服务感言
2014/02/27 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
医院见习总结
2015/06/24 职场文书