浅谈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 数组克隆方法 小结
Mar 20 Javascript
JS获取页面窗口大小的代码解读
Dec 01 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
Aug 24 Javascript
固定网页背景图同时保持图片比例的思路代码
Aug 15 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
Nov 18 Javascript
jQuery常用操作方法及常用函数总结
Jun 19 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
jQuery中first()方法用法实例
Jan 06 Javascript
JavaScript设计模式学习之“类式继承”
Mar 12 Javascript
跟我学习javascript的严格模式
Nov 16 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
Jun 08 Javascript
详解jQuery选择器
Dec 21 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 无限分类三种方式 非函数的递归调用!
2011/08/26 PHP
php 保留字列表
2012/10/04 PHP
php版微信发红包接口用法示例
2016/09/23 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
AJAX架构之Dojo篇
2007/04/10 Javascript
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
jQuery 连续列表实现代码
2009/12/21 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
Node.js事件驱动
2015/06/18 Javascript
JavaScript类型系统之Object详解
2016/01/07 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
Vue实现按钮旋转和移动位置的实例代码
2018/08/09 Javascript
JS回调函数原理与用法详解【附PHP回调函数】
2019/07/20 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
你正在寻找的CSS3 动画技术
2011/07/27 HTML / CSS
英国男士时尚网站:Dandy Fellow
2018/02/09 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
搬家公司的创业计划书
2014/01/01 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
2016年国培研修日志
2015/11/13 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS