exports和module.exports的区别——学习笔记

一开始,exportsmodule.exports都指向空对象(同一内存块)exports是引用 module.exports的值。module.exports 被改变的时候,exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports

/*app.js*/

var s = require("./log");

 s.log("hello");

 

//log.js

exports.log =function (str) {

console.log(str);

 }

 


 

//log.js
module.exports =function (str) {

console.log(str);

}

上述两种用法都没问题,但如果这样使用

 

exports = function (str) { 
console.log(str);     
}

 

前面的例子只是给 exports指向的对象添加属性,只是对 exports 指向的内存做了修改,内存指向并未发生改变。而上例则是对exports指向的内存进行了覆盖,使exports指向了一块新的内存,这样,exports和module.exports指向的内存并不是同一块,exports和module.exports并无任何关系。exports指向的内存有了变化,而module.exports指向的内存并无变化,仍为空对象{}。

 

 


 

 

 

 

 
//app.js
 var x = require('./init');
 console.log(x.a)
//init.js
 module.exports = {a: 2}//通过赋值的方式指向了另一块内存
 exports.a = 1  //只是在原来指向的内存中添加属性,内存指向并没有变化

运行app.js会有输出

2

 

这也就是module.exports对象不为空的时候exports对象就自动忽略因为module.exports通过赋值方式已经和exports对象指向的变量不同了exports对象怎么改和module.exports对象没关系了。真正导出的执行是module.exports)

 

 

 

转载于:https://www.cnblogs.com/JhonFlame/p/7999807.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值