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 相关文章推荐
JavaScript Event学习第十章 一些可替换的事件对
Feb 10 Javascript
JS特权方法定义作用以及与公有方法的区别
Mar 18 Javascript
通过Javascript读取本地Excel文件内容的代码示例
Apr 08 Javascript
jquery.mousewheel实现整屏翻屏效果
Aug 30 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
Sep 02 Javascript
js实现正则匹配中文标点符号的方法
Dec 23 Javascript
浅谈原生JS实现jQuery的animate()动画示例
Mar 08 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
Sep 26 Javascript
angularjs结合html5实现拖拽功能
Jun 25 Javascript
Vue实现日历小插件
Jun 26 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
JS回调函数简单易懂的入门实例分析
Sep 29 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
ThinkPHP视图查询详解
2014/06/30 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
Yii2 输出xml格式数据的方法
2016/05/03 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
javascript 操作select下拉列表框的一点小经验
2010/03/20 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
微信小程序 网络API发起请求详解
2016/11/09 Javascript
使用jQuery操作DOM的方法小结
2017/02/27 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
基于elementUI竖向表格、和并列的案例
2020/10/26 Javascript
[43:49]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
django连接oracle时setting 配置方法
2019/08/29 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
Spring http服务远程调用实现过程解析
2020/06/11 Python
python程序如何进行保存
2020/07/03 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
家长寄语大全
2014/04/02 职场文书
旷课检讨书500字
2014/10/14 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
python 破解加密zip文件的密码
2021/04/22 Python
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL