node.js中module.exports与exports用法上的区别


Posted in Javascript onSeptember 02, 2016

 Node.js 引入了模块(Module)概念,一个模块可以通过module.exports 或 exports 将函数、变量等导出,以使其它 JavaScript 脚本通过require() 函数引入并使用。 

module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {},exports 是指向的 module.exports 的引用,在模块内部大概是这样:

exports = module.exports = {};

举个栗子,在node.js中创建模块非常简单,一个文件就是一个模块,所以我们创建一个name.js文件就创建了一个模块name.js,使用exports和require对象对外提供接口和引用模块。

name.js

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
exports.myName=myName;

这样在使用的时候需要这样

app.js

var name=require('./name');

如果我们创建的name.js文件是使用module.exports和require对象对外提供接口和引用模块。

name.js 

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
module.exports=myName;

app.js

var name=require('./name');

exports 赋值其实是给 module.exports 这个空对象添加myName属性而已,为什么exports要使用添加属性的方式,而不用exports=myName?

exports是引用 module.exports的值。exports 被改变的时候,module.exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports。

如果将name.js改为

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
exports=myName;

app.js

var name=require('./name');<br>console.log(name);

运行会报错。因为,前面是通过给 exports 添加属性,而现在对 exports 指向的内存做了修改,exports 和 module.exports 不再指向同一块内存,即 module.exports 指向的那块内存并没有做任何改变,仍然为一个空对象 {},所以会报错。

Javascript 相关文章推荐
jQuery截取指定长度字符串的实现原理及代码
Jul 01 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
理解javascript中的严格模式
Feb 01 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
Jun 20 Javascript
JS判断form内所有表单是否为空的简单实例
Sep 09 Javascript
JavaScript中Array对象用法实例总结
Nov 29 Javascript
Angular中点击li标签实现更改颜色的核心代码
Dec 08 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
Dec 22 Javascript
通过fastclick源码分析彻底解决tap“点透”
Dec 24 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
May 27 Javascript
JS在if中的强制类型转换方式
Jul 15 Javascript
Vue.js的模板语法详解
Feb 16 Javascript
AngularJs Scope详解及示例代码
Sep 01 #Javascript
AngularJs Modules详解及示例代码
Sep 01 #Javascript
AngularJs IE Compatibility 兼容老版本IE
Sep 01 #Javascript
AngularJs 国际化(I18n/L10n)详解
Sep 01 #Javascript
AngularJs Forms详解及简单示例
Sep 01 #Javascript
vue.js入门教程之计算属性
Sep 01 #Javascript
AngularJs expression详解及简单示例
Sep 01 #Javascript
You might like
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
javascript 小数取整简单实现方式
2014/05/30 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
javascript删除数组重复元素的方法汇总
2015/06/24 Javascript
JavaScript绑定事件监听函数的通用方法
2016/05/14 Javascript
VUEJS实战之利用laypage插件实现分页(3)
2016/06/13 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
Bootstrap Multiselect 常用组件实现代码
2017/07/09 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
微信小程序中如何使用flyio封装网络请求
2019/07/03 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
el-table树形表格表单验证(列表生成序号)
2020/05/31 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
Python 中的with关键字使用详解
2016/09/11 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
2019/08/30 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
美国最好的保健品打折网店:Swanson
2017/08/04 全球购物
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
水利水电专业自荐信
2014/07/08 职场文书
调研座谈会发言材料
2014/08/23 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
小学教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年宣传思想工作总结
2014/12/10 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
检讨书格式范文
2015/05/07 职场文书
Go语言怎么使用变长参数函数
2022/07/15 Golang