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 相关文章推荐
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
file控件选择上传文件确定后触发的js事件是哪个
Mar 17 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
May 09 Javascript
Java Mybatis框架入门基础教程
Sep 21 Javascript
JQuery实现网页右侧随动广告特效
Jan 17 Javascript
JavaScript头像上传插件源码分享
Mar 29 Javascript
Vue.js教程之计算属性
Nov 11 Javascript
JS中的作用域链
Mar 01 Javascript
vue弹窗插件实战代码
Sep 08 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
Javascript实现html转pdf高清版(提高分辨率)
Feb 19 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中防止SQL注入攻击和XSS攻击的两个简单方法
2010/04/15 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
javascript里的条件判断
2007/02/27 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
纯JavaScript代码实现移动设备绘图解锁
2015/10/16 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
微信小程序实现Swiper轮播图效果
2019/11/22 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Flask框架的学习指南之开发环境搭建
2016/11/20 Python
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
python保存网页图片到本地的方法
2018/07/24 Python
Django csrf 验证问题的实现
2018/10/09 Python
python使用matplotlib画柱状图、散点图
2019/03/18 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
Django 开发环境配置过程详解
2019/07/18 Python
python matplotlib库绘制条形图练习题
2019/08/10 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Django设置Postgresql的操作
2020/05/14 Python
深入理解Python 多线程
2020/06/16 Python
基于python requests selenium爬取excel vba过程解析
2020/08/12 Python
HTML5学习笔记之History API
2015/02/26 HTML / CSS
企业安全生产演讲稿
2014/05/09 职场文书
工会优秀工作者事迹
2014/08/17 职场文书
学期个人自我总结
2015/02/13 职场文书
校长个人总结
2015/03/03 职场文书
农村党员干部承诺书
2015/05/04 职场文书
青春雷锋观后感
2015/06/10 职场文书