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 相关文章推荐
使用jQuery清空file文件域的解决方案
Apr 12 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
Nov 22 Javascript
jquery validate 自定义验证方法介绍 日期验证
Feb 27 Javascript
node.js中的require使用详解
Dec 15 Javascript
使用JavaScript的AngularJS库编写hello world的方法
Jun 23 Javascript
在 Angular 中实现搜索关键字高亮示例
Mar 21 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
Jul 20 Javascript
Vue中div contenteditable 的光标定位方法
Aug 25 Javascript
详解ES6 Symbol 的用途
Oct 14 Javascript
d3绘制基本的柱形图的实现代码
Dec 12 Javascript
js中call()和apply()改变指针问题的讲解
Jan 17 Javascript
vue backtop组件的实现完整代码
Apr 07 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
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
JQUERY的属性选择符和自定义选择符使用方法(二)
2011/04/07 Javascript
Web开发之JavaScript
2012/03/29 Javascript
JavaScript加强之自定义callback示例
2013/09/21 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
2015/02/23 Javascript
JS实现网站菜单拖拽移位效果的方法
2015/09/24 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
python中文乱码的解决方法
2013/11/04 Python
详解Python的迭代器、生成器以及相关的itertools包
2015/04/02 Python
spyder常用快捷键(分享)
2017/07/19 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
Python读取YUV文件,并显示的方法
2018/12/04 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
2019/03/05 Python
Python OpenCV实现视频分帧
2019/06/01 Python
学习Django知识点分享
2019/09/11 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
Tahari ASL官方网站:高级设计师女装
2021/03/15 全球购物
收银员岗位职责
2014/02/07 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
三严三实对照检查材料
2014/08/25 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android