浅谈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 相关文章推荐
prototype1.4中文手册
Sep 22 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
extjs 04_grid 单击事件新发现
Nov 27 Javascript
JavaScript表单通过正则表达式验证电话号码
Mar 14 Javascript
javascript结合fileReader 实现上传图片
Jan 30 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
jQuery实现图片局部放大镜效果
Mar 17 Javascript
jQuery实现页面倒计时并刷新效果
Mar 13 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 jQuery
教你完全理解ReentrantLock重入锁
Jun 03 Javascript
浅谈vue使用axios的回调函数中this不指向vue实例,为undefined
Sep 21 Javascript
Vue基本指令实例图文讲解
Feb 25 Vue.js
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
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
jQuery一步一步实现跨浏览器的可编辑表格,支持IE、Firefox、Safari、Chrome、Opera
2009/08/28 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
js复制内容到剪贴板代码,js复制代码的简单实例
2016/10/27 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
jQuery实现动态生成表格并为行绑定单击变色动作的方法
2017/04/17 jQuery
基于js中document.cookie全面解析
2017/09/14 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
js实现抽奖的两种方法
2020/03/19 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
Python下载懒人图库JavaScript特效
2015/05/28 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
wxPython实现带颜色的进度条
2019/11/19 Python
Python猴子补丁知识点总结
2020/01/05 Python
PyQt5实现画布小程序
2020/05/30 Python
Python+logging输出到屏幕将log日志写入文件
2020/11/11 Python
python自动化发送邮件实例讲解
2021/01/04 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
失业者真诚求职信范文
2013/12/25 职场文书
中学生自我评价范文
2014/02/08 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
优秀学生评语大全
2014/04/25 职场文书
企业宗旨标语
2014/06/10 职场文书
通讯稿格式及范文
2015/07/22 职场文书
2016中秋节问候语
2015/11/11 职场文书
2016年4月份红领巾广播稿
2015/12/21 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书