module.exports 与 exports的区别
2016-05-19 00:40
288 查看
这个问题近半年看过三次,一直都是迷迷糊糊的,今天看朴大以及一些stack上面的资料终于算是明白点了,先记录一下以免忘记.
大白话: exports 只是 module.exports 的引用,他们都指向内存中的同一个地址.
node在加载模块的时候,每个模块默认有一个module对象,该对象有个属性exports;初始值是空对象{},可以认为require引入模块调用的是module.exports最终指向的对象.
—-那么怎么理解exports只是module.exports的引用呢.可以这样来看
实际上就类似于java中 引用类型 赋值 与修改.
在stackoverflow 看到特别6的解释 请看:
参考资料请点击:
https://cnodejs.org/topic/5231a630101e574521e45ef8
difference between module.exports and exports
大白话: exports 只是 module.exports 的引用,他们都指向内存中的同一个地址.
node在加载模块的时候,每个模块默认有一个module对象,该对象有个属性exports;初始值是空对象{},可以认为require引入模块调用的是module.exports最终指向的对象.
—-那么怎么理解exports只是module.exports的引用呢.可以这样来看
var module.exports={}, exports=module.exports; //此时exports 和module.exports指向内存中同一块区域 //我们导出一个函数当使用exports的时候.像这样: exports=function(){ console.log('export function'); } //此时 exports指向的已经是内存中另一块区域了,它已经和module.exports={},赋值的对象没有任何关系,此时他们关系如此密切的两个好基友再无瓜葛。我们使用require()然后调用会报错。 //这种情况导出就可以工作很好理解,就是给最初的对象增加了一个属性sayHello而已. exports.sayHello=function(){ console.log('hello'); }
实际上就类似于java中 引用类型 赋值 与修改.
在stackoverflow 看到特别6的解释 请看:
var module = { exports: {} }; var exports = module.exports; // your code return module.exports;
参考资料请点击:
https://cnodejs.org/topic/5231a630101e574521e45ef8
difference between module.exports and exports
相关文章推荐
- bzoj2829 信用卡凸包
- 125_ListView和UI卡顿
- javascript 监听事件
- HDOJ/HDU 2710 Max Factor(素数快速筛选~)
- 定制班第二课 -----通过案例对Spark Streaming透彻理解三板斧之二:解密SparkStreaming运行机制和架构
- HDOJ/HDU 2710 Max Factor(素数快速筛选~)
- js数组去重的4个方法
- Nhibernate HQL 匿名类(严格说是map的使用以及构造函数的使用
- 124_inflate原理二
- bzoj1096【ZJOI2007】仓库建设
- 文件下载,或直接将字符串下载
- Unable to to create media player
- 函数表达式
- 122_findViewById原理
- Python基础(四) 基础拾遗、数据类型进阶
- JavaScript中的匿名函数及函数的闭包
- 在myeclipse用maven报错
- 121_非对称加密
- bzoj3437 小P的牧场
- Retrofit2与RxJava用法解析