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 相关文章推荐
利用JS延迟加载百度分享代码,提高网页速度
Jul 01 Javascript
jQuery取得select选择的文本与值的示例
Dec 09 Javascript
jQuery实现dialog设置focus焦点的方法
Jun 10 Javascript
代码分析jQuery四种静态方法使用
Jul 23 Javascript
基于Turn.js 实现翻书效果实例解析
Jun 20 Javascript
jQuery自定义组件(导入组件)
Nov 08 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
Angular.js中控制器之间的传值详解
Apr 24 Javascript
python爬取安居客二手房网站数据(实例讲解)
Oct 19 Javascript
微信小程序实现列表下拉刷新上拉加载
Jul 29 Javascript
深入理解移动前端开发之viewport
Oct 19 Javascript
微信小程序HTTP接口请求封装代码实例
Sep 05 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获得文件扩展名三法
2006/11/25 PHP
php学习之流程控制实现代码
2011/06/09 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
JS自调用匿名函数具体实现
2014/02/11 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
JavaScript里实用的原生API汇总
2015/05/14 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
2015/09/04 Javascript
js编写的treeview使用方法
2016/11/11 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
Node.js 多线程完全指南总结
2019/03/27 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
Python实现Const详解
2015/01/27 Python
在Python中使用第三方模块的教程
2015/04/27 Python
Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
2018/09/14 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
详解Django CAS 解决方案
2019/10/30 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
印度低票价航空公司:GoAir
2017/10/11 全球购物
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
2014年招生工作总结
2014/11/26 职场文书
滴水洞导游词
2015/02/10 职场文书
教师求职自荐信范文
2015/03/04 职场文书
【海涛dota】偶遇拉娜娅 质量局德鲁伊第一视角解说
2022/04/01 DOTA
Java数据结构之堆(优先队列)
2022/05/20 Java/Android