浅谈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 相关文章推荐
ASP中Sub和Function的区别说明
Aug 30 Javascript
SuperSlide2实现图片滚动特效
Jun 20 Javascript
JS数组array元素的添加和删除方法代码实例
Jun 01 Javascript
PHP获取当前页面完整URL的方法
Dec 02 Javascript
JavaScript注入漏洞的原理及防范(详解)
Dec 04 Javascript
vue跨域解决方法
Oct 15 Javascript
webpack之devtool详解
Feb 10 Javascript
angularjs通过过滤器返回超链接的方法
Oct 26 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
Jan 15 Javascript
vue中使用props传值的方法
May 08 Javascript
vue 对axios get pust put delete封装的实例代码
Jan 05 Javascript
QT与javascript交互数据的实现
May 26 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_screw 1.5:php加密: 安装与使用详解
2013/06/20 PHP
PHP实现过滤掉非汉字字符只保留中文字符
2015/06/04 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
动态显示可输入的字数提示还可以输入的字数
2014/04/01 Javascript
escape函数解决js中ajax传递中文出现乱码问题
2014/10/30 Javascript
jQuery实现带延迟的二级tab切换下拉列表效果
2015/09/01 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
js+ajax实现获取文件大小的方法
2015/12/08 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
DOM中事件处理概览与原理的全面解析
2016/08/16 Javascript
iview中Select 选择器多选校验方法
2018/03/15 Javascript
深入理解Node module模块
2018/03/26 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
python统计cpu利用率的方法
2015/06/02 Python
python中zip()方法应用实例分析
2016/04/16 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
2018/09/17 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
Python何时应该使用Lambda函数
2019/07/02 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
大宝sod蜜广告词
2014/03/21 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
募捐感谢信
2015/01/22 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
Python合并多张图片成PDF
2021/06/09 Python
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
vue+element ui实现锚点定位
2021/06/29 Vue.js