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 相关文章推荐
ExtJs GridPanel简单的增删改实现代码
Aug 26 Javascript
判断文件是否正在被使用的JS代码
Dec 21 Javascript
表格奇偶行设置不同颜色的核心JS代码
Dec 24 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
jQuery多级手风琴菜单实例讲解
Oct 22 Javascript
Window.Open打开窗体和if嵌套代码
Apr 15 Javascript
js数组操作方法总结(必看篇)
Nov 22 Javascript
canvas实现探照灯效果
Feb 07 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 Javascript
javascript中的replace函数(带注释demo)
Jan 07 Javascript
浅谈微信小程序flex布局基础
Sep 10 Javascript
Vue.js计算机属性computed和methods方法详解
Oct 12 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
javascript数组去重3种方法的性能测试与比较
2013/03/26 Javascript
document.documentElement和document.body区别介绍
2013/09/16 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
JavaScript实现的链表数据结构实例
2015/04/02 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
巧用数组制作图片切换js代码
2016/11/29 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
2018/06/19 Javascript
Vue CLI 3搭建vue+vuex最全分析(推荐)
2018/09/27 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
小程序实现列表倒计时功能
2021/01/29 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
python 并发编程 阻塞IO模型原理解析
2019/08/20 Python
python实现用户名密码校验
2020/03/18 Python
Python 中如何写注释
2020/08/28 Python
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
日语专业个人的求职信
2013/12/03 职场文书
委托书怎么写
2014/07/31 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
2014迎接教师节演讲稿
2014/09/10 职场文书
传承焦裕禄精神思想汇报2014
2014/09/10 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
生产工厂门卫岗位职责
2014/09/26 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
2014年女职工工作总结
2014/11/27 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书