浅谈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中实现块作用域的方法
Apr 01 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
Nov 10 Javascript
Extjs中通过Tree加载右侧TabPanel具体实现
May 05 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
May 07 Javascript
javascript教程:关于if简写语句优化的方法
May 17 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
Nov 30 Javascript
解析如何利用iframe标签以及js制作时钟
Dec 08 Javascript
用jQuery实现可输入多选下拉组合框实例代码
Jan 18 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
Feb 17 Javascript
vue组件通信传值操作示例
Jan 08 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查询搜索引擎排名位置的代码
2010/01/05 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
PHP中PDO的错误处理
2011/09/04 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
JavaScript表单通过正则表达式验证电话号码
2014/03/14 Javascript
js选项卡的实现方法
2015/02/09 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
20分钟打造属于你的Bootstrap站点
2016/07/27 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
学习vue.js计算属性
2016/12/03 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
Linux Centos7.2下安装nodejs&npm配置全局路径的教程
2018/05/15 NodeJs
微信小程序支付前端源码
2018/08/29 Javascript
cnpm加速Angular项目创建的方法
2018/09/07 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
Python中不同进制的语法及转换方法分析
2016/07/27 Python
浅析使用Python操作文件
2017/07/31 Python
Python中循环引用(import)失败的解决方法
2018/04/22 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
Python多线程爬取豆瓣影评API接口
2019/10/22 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
大学毕业自我评价
2014/02/02 职场文书
大一新生学期自我评价
2014/04/09 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
视光学专业自荐信
2014/06/24 职场文书
2015年“世界无车日”活动方案
2015/05/06 职场文书
追悼会答谢词范文
2015/09/29 职场文书
小学美术教学反思
2016/02/17 职场文书
2019年汽车租赁合同范本!
2019/08/12 职场文书