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基础 函数“重载” 详细介绍
Oct 25 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
Feb 12 Javascript
javascript用正则表达式过滤空格的实现代码
Jun 14 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
JQuery和HTML5 Canvas实现弹幕效果
Jan 04 Javascript
vue分类筛选filter方法简单实例
Mar 30 Javascript
JavaScript之DOM_动力节点Java学院整理
Jul 03 Javascript
js自定义trim函数实现删除两端空格功能
Feb 09 Javascript
Vue实现自定义下拉菜单功能
Jul 16 Javascript
JS闭包原理与应用经典示例
Dec 20 Javascript
详解Vue用cmd创建项目
Feb 12 Javascript
原生js实现日历效果
Mar 02 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实现随机生成易于记忆的密码
2015/06/19 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
jQuery知识点整理
2015/01/30 Javascript
AngularJS进行性能调优的7个建议
2015/12/28 Javascript
javascript实现一个简单的弹出窗
2016/02/22 Javascript
Javascript 获取鼠标当前的位置实现方法
2016/10/27 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
react-router中的属性详解
2017/06/01 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
JavaScript中关于base64的一些事
2019/05/06 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
JS端基于download.js实现图片、视频时直接下载而不是打开预览
2020/05/09 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
Python+django实现文件上传
2016/01/17 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
解决tensorflow由于未初始化变量而导致的错误问题
2020/01/06 Python
HTML5注册页面示例代码
2014/03/27 HTML / CSS
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
请解释在new与override的区别
2012/10/29 面试题
女大学生自我鉴定
2013/12/09 职场文书
高中生职业规划范文
2014/03/09 职场文书
幼儿园六一活动总结
2014/08/27 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
严以修身专题学习研讨会发言材料
2015/11/09 职场文书
python中print格式化输出的问题
2021/04/16 Python
golang 接口嵌套实现复用的操作
2021/04/29 Golang
Mysql 一主多从的部署
2022/05/20 MySQL