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 相关文章推荐
ASP 过滤数组重复数据函数(加强版)
May 31 Javascript
Dom与浏览器兼容性说明
Oct 25 Javascript
基于jquery的横向滚动条(滑动条)
Feb 24 Javascript
html中的input标签的checked属性jquery判断代码
Sep 19 Javascript
实现前后端数据交互方法汇总
Apr 07 Javascript
JavaScript实现的select点菜功能示例
Jan 16 Javascript
Angular 4.0学习教程之架构详解
Sep 12 Javascript
详解用函数式编程对JavaScript进行断舍离
Sep 18 Javascript
js 显示日期时间的实例(时间过一秒加1)
Oct 25 Javascript
解决vue页面刷新或者后退参数丢失的问题
Mar 13 Javascript
linux 后台运行node服务指令方法
May 23 Javascript
深入探索VueJS Scoped CSS 实现原理
Sep 23 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 异常处理实现代码
2009/03/10 PHP
PHP SEO优化之URL优化方法
2011/04/21 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php实现的Cookies操作类实例
2014/09/24 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
input的focus方法使用
2010/03/13 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
2013/11/25 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
layer弹出层取消遮罩的方法
2019/09/25 Javascript
在vue中阻止浏览器后退的实例
2019/11/06 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
Python写的服务监控程序实例
2015/01/31 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
pymysql模块的使用(增删改查)详解
2019/09/09 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
python 按钮点击关闭窗口的实现
2020/03/04 Python
在python中修改.properties文件的操作
2020/04/08 Python
详解Django配置JWT认证方式
2020/05/09 Python
基于Python实现粒子滤波效果
2020/12/01 Python
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
相亲活动方案
2014/08/26 职场文书
学子宴致辞大全
2015/07/27 职场文书