浅谈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 相关文章推荐
在页面上点击任一链接时触发一个事件的代码
Apr 07 Javascript
js中的前绑定和后绑定详解
Aug 01 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
Mar 30 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
May 17 Javascript
微信小程序 简单教程实例详解
Jan 13 Javascript
JS实现的二叉树算法完整实例
Apr 06 Javascript
Vue 中使用 CSS Modules优雅方法
Apr 09 Javascript
JavaScript继承与聚合实例详解
Jan 22 Javascript
vue项目中mock.js的使用及基本用法
May 22 Javascript
JS桶排序的简单理解与实现方法示例
Nov 25 Javascript
JS函数参数的传递与同名参数实例分析
Mar 16 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
linux下为php添加curl扩展的方法
2011/07/29 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
javascript Window及document对象详细整理
2011/01/12 Javascript
myeclipse安装jQuery插件的方法
2011/03/29 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
jquery 正整数数字校验正则表达式
2017/01/10 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
解决Mac安装thrift因bison报错的问题
2018/05/17 Javascript
用Python输出一个杨辉三角的例子
2014/06/13 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
Django中Forms的使用代码解析
2018/02/10 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
Python 没有main函数的原因
2020/07/10 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
2020/11/11 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
理肤泉加拿大官网:La Roche-Posay加拿大
2018/07/06 全球购物
西班牙高科技产品购物网站:MejorDeseo
2019/09/08 全球购物
现金会计岗位职责
2013/12/05 职场文书
cf搞笑广告词
2014/03/14 职场文书
计生专干事迹
2014/05/28 职场文书
司法局火灾防控方案
2014/06/05 职场文书
装饰工程师岗位职责
2014/06/08 职场文书
高中生毕业评语
2014/12/30 职场文书
春风化雨观后感
2015/06/11 职场文书
导游词之安徽九华山
2019/09/18 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
SpringBoot集成Druid连接池连接MySQL8.0.11
2021/07/02 Java/Android