浅谈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 相关文章推荐
juqery 学习之三 选择器 层级 基本
Nov 25 Javascript
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
判断文档离浏览器顶部的距离的方法
Jan 08 Javascript
常用js,css文件统一加载方法(推荐) 并在加载之后调用回调函数
Sep 23 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
Mar 15 Javascript
Express + Node.js实现登录拦截器的实例代码
Jul 01 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
Nov 09 Javascript
详解iframe跨域的几种常用方法(小结)
Apr 29 Javascript
JavaScript find()方法及返回数据实例
Apr 30 Javascript
如何实现js拖拽效果及原理解析
May 08 Javascript
在vue中import()语法不能传入变量的问题及解决
Apr 01 Vue.js
Javascript webpack动态import
Apr 19 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
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
Fatal error: Call to undefined function curl_init()解决方法
2010/04/09 PHP
PHP引用返回用法示例
2016/05/28 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
laravel框架 api自定义全局异常处理方法
2019/10/11 PHP
超级简单的图片防盗(HTML),好用
2007/04/08 Javascript
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
js对象之JS入门之Array对象操作小结
2011/01/09 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
表单验证插件Validation应用的实例讲解
2015/10/10 Javascript
Javascript的表单验证-揭开正则表达式的面纱
2016/03/18 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
webpack 3.X学习之多页面打包的方法
2018/09/04 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
django定期执行任务(实例讲解)
2017/11/03 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python 实现从高分辨图像上抠取图像块
2020/01/02 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
Python tempfile模块生成临时文件和临时目录
2020/09/30 Python
施华洛世奇意大利官网:SWAROVSKI意大利
2018/07/23 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
廉洁教育学习材料
2014/05/19 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
临时租车协议范本
2014/09/23 职场文书
介绍信样本
2015/01/31 职场文书
闪闪红星观后感
2015/06/08 职场文书
MySQL派生表联表查询实战过程
2022/03/20 MySQL
PYTHON InceptionV3模型的复现详解
2022/05/06 Python