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 相关文章推荐
一个很酷的拖动层的js类,兼容IE及Firefox
Jun 23 Javascript
Javascript的并行运算实现代码
Nov 19 Javascript
基于jQuery的Tab选项框效果代码(插件)
Mar 01 Javascript
基于jQuery的倒计时插件代码
May 07 Javascript
js替代copy(示例代码)
Nov 27 Javascript
javascript中的循环语句for语句深入理解
Apr 04 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
Feb 05 Javascript
Vue.js中数据绑定的语法教程
Jun 02 Javascript
Vue组件教程之Toast(Vue.extend 方式)详解
Jan 27 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
Nov 21 Javascript
如何基于JS截获动态代码
Dec 25 Javascript
Vue实现动态查询规则生成组件
May 27 Vue.js
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获取数组最后一个值的2种方法
2015/01/21 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
jQuery插件实现文件上传功能(支持拖拽)
2020/08/27 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
如何使用VuePress搭建一个类型element ui文档
2019/02/14 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
python之yield表达式学习
2014/09/02 Python
Python中实现的RC4算法
2015/02/14 Python
python实现Floyd算法
2018/01/03 Python
python try except 捕获所有异常的实例
2018/10/18 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
财务管理个人自荐书范文
2013/11/24 职场文书
工作表扬信的范文
2014/01/10 职场文书
小学英语教学反思
2014/01/30 职场文书
2014年五一活动策划方案
2014/03/15 职场文书
劲霸男装广告词改编版
2014/03/21 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
学生无故旷课检讨书
2014/09/20 职场文书
2014年环卫工作总结
2014/11/22 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
mysql 直接拷贝data 目录下文件还原数据的实现
2021/07/25 MySQL