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 相关文章推荐
二行代码解决全部网页木马
Mar 28 Javascript
当json键为数字时的取值方法解析
Nov 15 Javascript
jQuery unbind()方法实例详解
Jan 19 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
Mar 19 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
Sep 21 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 Javascript
微信小程序中实现手指缩放图片的示例代码
Mar 13 Javascript
在微信小程序中使用图表的方法示例
Apr 25 Javascript
详解Vue串联过滤器的使用场景
Apr 30 Javascript
swiper实现导航滚动效果
Dec 13 Javascript
深入理解javascript中的this
Feb 08 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之readdir函数用法实例
2014/11/13 PHP
php中静态类与静态变量用法的区别分析
2015/01/15 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
JS数组(Array)处理函数整理
2014/12/07 Javascript
一分钟理解js闭包
2016/05/04 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
Vue列表渲染的示例代码
2018/11/01 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
2020/08/21 Javascript
vue+element搭建后台小总结 el-dropdown下拉功能
2020/04/10 Javascript
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python素数检测实例分析
2015/06/15 Python
python比较两个列表是否相等的方法
2015/07/28 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
bluepy 一款python封装的BLE利器简单介绍
2019/06/25 Python
Win10系统下安装labelme及json文件批量转化方法
2019/07/30 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
python Matplotlib模块的使用
2020/09/16 Python
初三学习决心书
2014/03/11 职场文书
入党积极分子评语
2014/05/04 职场文书
党员教师自我剖析材料
2014/09/29 职场文书
工程部主管岗位职责
2015/02/12 职场文书
大学新生入学感想
2015/08/07 职场文书