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 判断一个元素是否在页面中存在
Dec 27 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
Jun 16 Javascript
javascript实现下雨效果
Mar 27 Javascript
vue初尝试--项目结构(推荐)
Jan 30 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
Feb 21 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
p5.js临摹动态图形实现方法详解
Oct 23 Javascript
jQuery插件simplePagination的使用方法示例
Apr 28 jQuery
解决vue 退出动画无效的问题
Aug 09 Javascript
利用React高阶组件实现一个面包屑导航的示例
Aug 23 Javascript
详解实现vue的数据响应式原理
Jan 20 Vue.js
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中执行cmd命令的方法
2014/10/11 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
window.addeventjs事件驱动函数集合addEvent等
2008/02/19 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
JavaScript在多浏览器下for循环的使用方法
2012/11/07 Javascript
js动态创建表格,删除行列的小例子
2013/07/20 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
js动态切换图片的方法
2015/01/20 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
JSONP基础知识详解
2017/03/19 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
javaScript canvas实现(画笔大小 颜色 橡皮的实例)
2017/11/28 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
Python lxml模块安装教程
2015/06/02 Python
Python类的动态修改的实例方法
2017/03/24 Python
python删除某个字符
2018/03/19 Python
pandas 选择某几列的方法
2018/07/03 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
Python对wav文件的重采样实例
2020/02/25 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
基于pycharm 项目和项目文件命名规则的介绍
2021/01/15 Python
斯洛伐克电子产品购物网站:DATART
2020/04/05 全球购物
基于Python 函数和方法的区别说明
2021/03/24 Python
应聘医药代表职位求职信
2013/10/21 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书