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多浏览器捕捉回车事件代码
Jun 22 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
Nov 30 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
Jun 05 Javascript
jquery原创弹出层折叠效果点击折叠弹出一个层
Mar 12 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
Oct 13 Javascript
AngularJS服务service用法总结
Dec 13 Javascript
vue.js学习笔记:如何加载本地json文件
Jan 17 Javascript
关于Vue Webpack2单元测试示例详解
Aug 14 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
vue treeselect获取当前选中项的label实例
Aug 31 Javascript
Javascript表单序列化原理及实现代码详解
Oct 30 Javascript
JavaScript数组reduce()方法的语法与实例解析
Jul 07 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实现encode64编码类实例
2015/03/24 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
ajax处理php返回json数据的实例代码
2013/01/24 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
Nodejs进程管理模块forever详解
2014/06/01 NodeJs
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
2014/08/12 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
纯javascript实现的小游戏《Flappy Pig》实例
2015/07/27 Javascript
js弹出窗口返回值的简单实例
2016/05/28 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
详解webpack es6 to es5支持配置
2017/05/04 Javascript
从setTimeout看js函数执行过程
2017/12/19 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
python文件和目录操作函数小结
2014/07/11 Python
python数据结构之链表的实例讲解
2017/07/25 Python
python执行使用shell命令方法分享
2017/11/08 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
Django 创建新App及其常用命令的实现方法
2019/08/04 Python
详解Python3 pandas.merge用法
2019/09/05 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
Django用户身份验证完成示例代码
2020/04/03 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
荷兰网上买鞋:MooieSchoenen.nl
2017/09/12 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
新教师培训方案
2014/06/08 职场文书
质量整改通知单
2015/04/21 职场文书
学校开除通知书
2015/04/25 职场文书
卫生主题班会
2015/08/14 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
读《人生的智慧》有感:闲暇是人生的精华
2019/12/25 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
配置nginx负载均衡
2022/05/06 Servers