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创建快捷方式的简单实例
Aug 09 Javascript
常见表单重复提交问题整理及解决方法
Nov 13 Javascript
js实现简易的单数字随机抽奖(0-9)
Mar 19 Javascript
Angular.js中$resource高大上的数据交互详解
Jul 30 Javascript
解决Vue2.x父组件与子组件之间的双向绑定问题
Mar 06 Javascript
bootstrap 路径导航 分页 进度条的实例代码
Aug 06 Javascript
关于微信公众号开发无法支付的问题解决
Dec 28 Javascript
详解Vue用cmd创建项目
Feb 12 Javascript
微信小程序实现批量倒计时功能
Nov 01 Javascript
el-select 下拉框多选实现全选的实现
Aug 02 Javascript
JavaScript字符串处理常见操作方法小结
Nov 15 Javascript
VSCode插件安装完成后的配置(常用配置)
Aug 24 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将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
解析MySql与Java的时间类型
2013/06/22 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
VBScript版代码高亮
2006/06/26 Javascript
讲两件事:1.this指针的用法小探. 2.ie的attachEvent和firefox的addEventListener在事件处理上的区别
2007/04/12 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
页面中js执行顺序
2009/11/09 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
jquery实现转盘抽奖功能
2017/01/06 Javascript
jQuery实现鼠标滑过商品小图片上显示对应大图片功能【测试可用】
2018/04/27 jQuery
原生微信小程序开发中 redux 的使用详解
2021/02/18 Javascript
Python 读写文件的操作代码
2018/09/20 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
解决yum对python依赖版本问题
2019/07/05 Python
python gdal安装与简单使用
2019/08/01 Python
python pymysql库的常用操作
2020/10/16 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
基于CSS3实现图片模糊过滤效果
2015/11/19 HTML / CSS
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
自荐书封面下载
2013/11/29 职场文书
大学生水果店创业计划书
2014/01/28 职场文书
《厄运打不垮的信念》教学反思
2014/04/13 职场文书
支部书记四风对照材料
2014/08/28 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
七年级上册生物的课件
2019/08/07 职场文书
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
给numpy.array增加维度的超简单方法
2021/06/02 Python