浅谈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 命名空间以提高代码重用性
Nov 13 Javascript
jquery(hide方法)隐藏指定元素实例
Nov 11 Javascript
教你如何自定义百度分享插件以及bshare分享插件的分享按钮
Jun 20 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
Dec 18 Javascript
JS实现来回出现文字的状态栏特效代码
Oct 31 Javascript
最全的JavaScript开发工具列表 总有一款适合你
Jun 29 Javascript
JavaScript调用模式与this关键字绑定的关系
Apr 21 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
May 27 Javascript
vue 引用自定义ttf、otf、在线字体的方法
May 09 Javascript
vue-router路由模式详解(小结)
Aug 26 Javascript
js+css实现扇形导航效果
Aug 18 Javascript
jQuery实现动态加载瀑布流
Sep 01 jQuery
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新手上路(十三)
2006/10/09 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP操作XML作为数据库的类
2010/12/19 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
分享20款好玩的jQuery游戏
2011/04/17 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
JavaScript中的return布尔值的用法和原理解析
2017/08/14 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
微信小程序自定义纯净模态框(弹出框)的实例代码
2020/03/09 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
python学习手册中的python多态示例代码
2014/01/21 Python
Python采用socket模拟TCP通讯的实现方法
2014/11/19 Python
教你用Python写安卓游戏外挂
2018/01/11 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Python占用的内存优化教程
2019/07/28 Python
Python 代码调试技巧示例代码
2020/08/11 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
python中numpy数组与list相互转换实例方法
2021/01/29 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
canvas之万花筒效果的简单实现(推荐)
2016/08/16 HTML / CSS
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
学校介绍信范文
2014/01/14 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
商场周年庆活动方案
2014/08/19 职场文书
群众路线教育实践活动整改落实情况汇报
2014/10/28 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
Python多个MP4合成视频的实现方法
2021/07/16 Python
数据设计之权限的实现
2022/08/05 MySQL