浅谈node中的exports与module.exports的关系


Posted in Javascript onAugust 01, 2017

因为是做前端的,对node的生态一直也比较关注,对于node中对commonJS模块化的实现给了我们很大的方便,之前对于导出的module.exports和exports一直模模糊糊,今天做一个整理

先来个js基础部分的复习

let obj1 = {}
let obj2 = obj1
obj2.a = 'a'
obj1.b = 'b'
console.log(obj1) //{a: 'a', b: 'b'}
console.log(obj2) //{a: 'a', b: 'b'}
obj2 = {}
console.log(obj2) //{}
console.log(obj1) //{a: 'a', b: 'b'}

obj1先指向内存中的一个区块,然后将obj1指向内存区块的引用传递给了obj2,那么这时obj1和obj2都指向了内存中的同一个区块,所以无论是通过obj1还是obj2向这块内存中加入属性,都会同时反应在obj1和obj2的身上,这时候obj2切断了与原先内存块的联系,指向了新的内存块,而obj1还是指向最先的内存区块,这时他们就各自管理各自的内存区块

现在看看module.exports和exports的关系

如图最开始的时候module.exports和exports都指向同一块内存区域,红线包含的区域,其中module.exports指向的区域用灰色填充

浅谈node中的exports与module.exports的关系

初始

现在我们导出为module.exports = {a: "a"},那么module.exports切断与原来的红色线包围的内存块,指向新的内存块还是灰色填充的内存块,如图

浅谈node中的exports与module.exports的关系

导出module.exports

或者是我们导出为exports = {a: "a"},那么exports切断与原来的红线包含的内存块,指向新的内存块,如图

浅谈node中的exports与module.exports的关系

导出为exports

重要的是我们通过require导入的永远都是module.exports,即图中灰色填充的内存块,而不是红色线条的最初始的内存块,所以无论我们在导出的时候是用module.exports还是exports只要保证导出的内容是挂载在灰色内存块上都是可行的

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery下为Event handler传递动态参数的代码
Jan 06 Javascript
jQuery实现的图片分组切换焦点图插件
Jan 06 Javascript
Jquery简单分页实现方法
Jul 24 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
利用yarn实现一个webpack+react种子
Oct 25 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
Oct 26 Javascript
js 用于检测类数组对象的函数方法
May 02 Javascript
详解如何提高 webpack 构建 Vue 项目的速度
Jul 03 Javascript
完美实现js拖拽效果 return false用法详解
Jul 28 Javascript
vue绑定设置属性的多种方式(5)
Aug 16 Javascript
JAVA面试题 static关键字详解
Jul 16 Javascript
jQuery实现带进度条的轮播图
Sep 13 jQuery
Vue2.0 组件传值通讯的示例代码
Aug 01 #Javascript
谈谈VUE种methods watch和compute的区别和联系
Aug 01 #Javascript
Angular4学习笔记之实现绑定和分包
Aug 01 #Javascript
详解js静态资源文件请求的处理
Aug 01 #Javascript
Angular4学习笔记之准备和环境搭建项目
Aug 01 #Javascript
jQuery上传插件webupload使用方法
Aug 01 #jQuery
js实现鼠标拖拽多选功能示例
Aug 01 #Javascript
You might like
开发大型PHP项目的方法
2006/10/09 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
thinkphp实现like模糊查询实例
2014/10/29 PHP
微信自定义菜单的创建/查询/取消php示例代码
2016/08/05 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
js计数器代码
2006/11/04 Javascript
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
jQuery+css实现的切换图片功能代码
2016/01/27 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
vue根据进入的路由进行原路返回的方法
2018/09/26 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
layui内置模块layim发送图片添加加载动画的方法
2019/09/23 Javascript
解决ele ui 表格表头太长问题的实现
2019/11/13 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
情人节快乐! python绘制漂亮玫瑰
2020/08/18 Python
python SocketServer源码深入解读
2019/09/17 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
纯CSS打造(无图像无js)的非常流行的讲话(语音)气泡效果
2012/12/28 HTML / CSS
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
体育学院毕业生自荐信
2013/11/03 职场文书
更夫岗位责任制
2014/02/11 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
班主任开场白
2015/06/01 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
php引用传递
2021/04/01 PHP
基于Golang 高并发问题的解决方案
2021/05/08 Golang
Python字典和列表性能之间的比较
2021/06/07 Python
nodejs利用readline提示输入内容实例代码
2021/07/15 NodeJs