可能有人見過直接使用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便可。內存