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验证表单大全
Nov 25 Javascript
javascript拓展DOM操作 prependChild insertAfert
Nov 17 Javascript
父页面显示遮罩层弹出半透明状态的dialog
Mar 04 Javascript
Jquery树插件zTree用法入门教程
Feb 17 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
angularJS深拷贝详解
Mar 23 Javascript
JS实现元素上下左右移动效果
Oct 18 Javascript
React 路由懒加载的几种实现方案
Oct 23 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 Javascript
element跨分页操作选择详解
Jun 29 Javascript
jQuery+ThinkPHP实现图片上传
Jul 23 jQuery
js正则表达式简单校验方法
Jan 03 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
使用php4加速网络传输
2006/10/09 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
PHP7内核CGI与FastCGI详解
2019/04/14 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
基于JQuery和CSS3实现仿Apple TV海报背景视觉差特效源码分享
2015/09/21 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
js事件冒泡、事件捕获和阻止默认事件详解
2016/08/04 Javascript
js拖拽功能实现代码解析
2016/11/28 Javascript
windows下vue-cli及webpack搭建安装环境
2017/04/25 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
Vue数据双向绑定原理实例解析
2020/05/15 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
python 创建弹出式菜单的实现代码
2017/07/11 Python
python机器学习实战之树回归详解
2017/12/20 Python
python的常用模块之collections模块详解
2018/12/06 Python
详解Python中的内建函数,可迭代对象,迭代器
2019/04/29 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
对python pandas中 inplace 参数的理解
2020/06/27 Python
工程力学专业毕业生求职信
2013/10/06 职场文书
采购主管工作职责
2013/12/12 职场文书
联谊活动策划书
2014/01/26 职场文书
《夜晚的实验》教学反思
2014/02/19 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
Redis 彻底禁用RDB持久化操作
2021/07/09 Redis
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
2023/05/08 MySQL