浅谈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 相关文章推荐
完美解决JS中汉字显示乱码问题(已解决)
Dec 27 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
Dec 14 Javascript
JavaScript学习笔记之获取当前目录的实现代码
Dec 14 Javascript
AngularJS基础学习笔记之简单介绍
May 10 Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 Javascript
Vue的MVVM实现方法
Aug 16 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
vue-resource拦截器设置头信息的实例
Oct 27 Javascript
微信小程序如何自定义table组件
Jun 29 Javascript
layui-table对返回的数据进行转变显示的实例
Sep 04 Javascript
echarts实现晶体球面投影的实例教程
Oct 10 Javascript
微信小程序实现可长按移动控件
Nov 01 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
PHP5多态性与动态绑定介绍
2015/04/03 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
2016/04/11 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
javascript void(0)的妙用
2009/10/21 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
JS判断对象是否存在的10种方法总结
2013/12/23 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
JavaScript匿名函数用法分析
2015/02/13 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
js设置随机切换背景图片的简单实例
2017/11/12 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
Vue引入Stylus知识点总结
2020/01/16 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
vue组件添加事件@click.native操作
2020/10/30 Javascript
Python字符串格式化
2015/06/15 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
python自动生成sql语句的脚本
2021/02/24 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
优秀毕业生就业推荐信
2014/05/22 职场文书
爱护花草树木的标语
2014/06/11 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
免职证明样本
2014/10/23 职场文书
特此通知格式
2015/04/27 职场文书
python解决12306登录验证码的实现
2021/04/18 Python
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA