可能有人见过直接使用exports的,有的是使用module.exports的,这里稍微的讲解下这二者的区别。javascript
先举个简单的例子:java
var a = {name:'cxy'}; var b = a; console.log(a); // {name: "cxy"} console.log(b); // {name: "cxy"}
a和b输出的结果是同样的。如今我改变下b中name的值:ui
b.name = 'wxm'; console.log(a); // {name: "wxm"} console.log(b); // {name: "wxm"}
a和b的输出结果都发生了改变。我再对b进行从新声明:code
var b = {name:'js'}; console.log(a); // {name: "wxm"} console.log(b); // {name: "js"}
这三个例子输出了三种结果:对象
解释:a 是一个对象,b 是对 a 的引用,即 a 和 b 指向同一块内存,因此1中的输出是同样的。当对 b 做修改时,即 a 和 b 指向同一块内存地址的内容发生了改变,a 也会体现出来,因此第2个例子输出也同样。当 b 被覆盖时,b 指向了一块新的内存,a 仍是指向原来的内存,因此最后输出会不同。blog
那么此时就能够引出exports
和module.exports
了:ip
若是module.exports发生了新指向,则exports无效;若module.exports没有发生变化,则直接exports便可。内存