浅谈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 相关文章推荐
JavaScript脚本语言在网页中的简单应用
May 13 Javascript
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
Jan 30 Javascript
文档对象模型DOM通俗讲解
Nov 01 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
javascript实现多级联动下拉菜单的方法
Feb 06 Javascript
jQuery+html5实现div弹出层并遮罩背景
Apr 15 Javascript
chrome不支持form.submit的解决方案
Apr 28 Javascript
360提示[高危]使用存在漏洞的JQuery版本的解决方法
Oct 27 jQuery
JavaScript如何对图片进行黑白化
Apr 10 Javascript
vue 引用自定义ttf、otf、在线字体的方法
May 09 Javascript
JS实现的雪花飘落特效示例
Dec 03 Javascript
vue中路由跳转不计入history的操作
Sep 21 Javascript
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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
PHP 字符串长度判断效率更高的方法
2014/03/02 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
PHP实现的简单操作SQLite数据库类与用法示例
2017/06/19 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
jquery.jstree 增加节点的双击事件代码
2010/07/27 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
Web打印解决方案之普通报表打印功能
2016/08/29 Javascript
jQuery中$.ajax()方法参数解析
2016/10/22 Javascript
jQuery自定义元素右键点击事件(实现案例)
2017/04/28 jQuery
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
Python 解决中文写入Excel时抛异常的问题
2018/05/03 Python
python调用外部程序的实操步骤
2019/03/04 Python
Python数据类型之List列表实例详解
2019/05/08 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
django中使用POST方法获取POST数据
2019/08/20 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
python 三种方法提取pdf中的图片
2021/02/07 Python
意大利买卖二手奢侈品网站:LAMPOO
2020/06/03 全球购物
TCP/IP的分层模型
2013/10/27 面试题
服务整改报告
2014/11/06 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
三十年同学聚会感言
2015/07/30 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
导游词之湖北武当山
2019/09/23 职场文书
Debian11 Xfce终端光标的颜色怎么设置?
2022/08/14 数码科技