浅谈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 相关文章推荐
向fckeditor编辑器插入指定代码的方法
May 25 Javascript
JavaScript的面向对象方法以及差别
Mar 31 Javascript
JavaScript DOM 学习第七章 表单的扩展
Feb 19 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
jquery基础教程之deferred对象使用方法
Jan 22 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
Jun 16 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
那些精彩的JavaScript代码片段
Jan 12 Javascript
JavaScript中利用for循环遍历数组
Jan 15 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
May 12 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
May 16 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 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 广告调用类代码(支持Flash调用)
2011/08/11 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
php7 新增功能实例总结
2020/05/25 PHP
JAVASCRIPT keycode总结
2009/02/04 Javascript
3Z版基于jquery的图片复选框(asp.net+jquery)
2010/04/12 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
javascript 闭包详解
2015/02/15 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
AngularJS 使用$sce控制代码安全检查
2016/01/05 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
基于vue.js快速搭建图书管理平台
2017/10/29 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
js实现转动骰子模型
2019/10/24 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
javascript自定义加载loading效果
2020/09/15 Javascript
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python+selenium点击网页上指定坐标的实例
2019/07/05 Python
python requests指定出口ip的例子
2019/07/25 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
2020/04/22 Python
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
材料工程专业毕业生求职信
2014/03/04 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
学生检讨书怎么写
2014/10/09 职场文书
个人总结格式范文
2015/03/09 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
Redis RDB技术底层原理详解
2021/09/04 Redis
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
nginx配置之并发频次限制
2022/04/18 Servers