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官方 jQuery1.1.3发布,速度提升800%,体积保持20K
Aug 19 Javascript
基于jquery的监控数据是否发生改变
Apr 11 Javascript
jQuery筛选器children()案例详解(图文)
Feb 17 Javascript
JQuery调用绑定click事件的3种写法
Mar 28 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
Oct 16 Javascript
Jquery 全选反选实例代码
Nov 19 Javascript
jQuery动画效果图片轮播特效
Jan 12 Javascript
TinyMCE汉化及本地上传图片功能实例详解
May 31 Javascript
简单实现Vue的observer和watcher
Dec 21 Javascript
Vue.js实例方法之生命周期详解
Jul 03 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
vue移动端屏幕适配详解
Apr 30 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类
2008/04/09 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
CI框架中cookie的操作方法分析
2014/12/12 PHP
初识ThinkPHP控制器
2016/04/07 PHP
php报错502badgateway解决方法
2019/10/11 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
两个Javascript小tip资料
2010/11/23 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
js弹窗返回值详解(window.open方式)
2014/01/11 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
Webpack+Vue如何导入Jquery和Jquery的第三方插件
2017/02/20 Javascript
jQuery之动画ajax事件(实例讲解)
2017/07/18 jQuery
基于vue2实现左滑删除功能
2017/11/28 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
微信小程序页面调用自定义组件内的事件详解
2019/09/12 Javascript
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
electron 如何将任意资源打包的方法步骤
2020/04/16 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
python实现class对象转换成json/字典的方法
2016/03/11 Python
Python+Redis实现布隆过滤器
2019/12/08 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
Python新手学习装饰器
2020/06/04 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
如何用JQuery进行表单验证
2013/05/29 面试题
周年庆典邀请函范文
2014/01/23 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技
2022年显卡天梯图(6月更新)
2022/06/17 数码科技