浅谈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 用CreateElement动态创建标签示例
Nov 20 Javascript
使用js判断控件是否获得焦点
Jan 03 Javascript
jQuery无刷新分页完整实例代码
Oct 27 Javascript
浅析angularJS中的ui-router和ng-grid模块
May 20 Javascript
Bootstrap基本组件学习笔记之列表组(11)
Dec 07 Javascript
JS实现本地存储信息的方法(基于localStorage与userData)
Feb 18 Javascript
JavaScript拖动层Div代码
Mar 01 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
Jan 08 jQuery
node+koa2+mysql+bootstrap搭建一个前端论坛
May 06 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
Dec 04 Javascript
JS实现数组深拷贝的方法分析
Mar 06 Javascript
Vue自定义render统一项目组弹框功能
Jun 07 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数组实现无限分类,不使用数据库,不使用递归.
2006/12/09 PHP
PHP 危险函数解释 分析
2009/04/22 PHP
php中批量替换文件名的实现代码
2011/07/20 PHP
PHP输出时间差函数代码
2013/01/28 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
2014最热门的24个php类库汇总
2014/12/18 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
jquery事件preventDefault()方法用法实例
2015/01/16 Javascript
浅谈javascript中基本包装类型
2015/06/03 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
微信小程序 九宫格实例代码
2017/01/21 Javascript
基于JavaScript实现新增内容滚动播放效果附完整代码
2017/08/24 Javascript
深入理解Vue生命周期、手动挂载及挂载子组件
2017/09/27 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
简单谈谈python中的多进程
2016/11/06 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
Django使用Jinja2模板引擎的示例代码
2019/08/09 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
是否有自动比较结构的方法
2015/06/03 面试题
我爱读书演讲稿
2014/05/07 职场文书
房屋产权证明书
2014/10/15 职场文书
小学教师求职信范文
2015/03/20 职场文书
教务处干事工作总结
2015/08/14 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python