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三个关闭弹出层的小示例
Nov 05 Javascript
JS实现简单易用的手机端浮动窗口显示效果
Sep 07 Javascript
AngularJS  双向数据绑定详解简单实例
Oct 20 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
Jun 16 jQuery
利用types增强vscode中js代码提示功能详解
Jul 07 Javascript
angular.extend方法的具体使用
Sep 14 Javascript
基于IView中on-change属性的使用详解
Mar 15 Javascript
详解React 服务端渲染方案完美的解决方案
Dec 14 Javascript
Element input树型下拉框的实现代码
Dec 21 Javascript
Node.js实现简单的爬取的示例代码
Jun 25 Javascript
element ui分页多选,翻页记忆的实例
Sep 03 Javascript
node.JS二进制操作模块buffer对象使用方法详解
Feb 06 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 smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
使用jQuery轻松实现Ajax的实例代码
2010/08/16 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
学习JavaScript编程语言的8张思维导图分享
2015/03/27 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
JavaScript原生数组函数实例汇总
2020/10/14 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
对Python闭包与延迟绑定的方法详解
2019/01/07 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
Django如何使用jwt获取用户信息
2020/04/21 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
python excel和yaml文件的读取封装
2021/01/12 Python
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
大学生四年生活自我鉴定
2013/11/21 职场文书
法学研究生自我鉴定范文
2013/12/04 职场文书
事业单位接收函
2014/01/10 职场文书
班委竞选演讲稿
2014/04/28 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
表扬信范文
2015/05/04 职场文书
安娜卡列尼娜观后感
2015/06/11 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python