總結:exports是module.exports的指向.
1. module應該是require方法中,上下文中的對象
2. exports對象應該是上下文中引用module.exports的新對象
3. exports.a = xxx 會將修改更新到module.exports對象中
4. exports = xxx 直接改變了 exports的指向
首先我們來舉個例子吧,為了更好地理解.
define(function(require,exports,module){
function add(){
console.log('這是add方法');
}
//exports.add = add;
//module.exports.add = add;
//module.exports = add;
//exports = add;
})
這么簡單的一個例子,里面,
exports.add = add;和
module.exports.add = add;其實是一樣的,返回的時候返回的都是一個exports對象,而里面都有一個add的方法,所以都可以調用add()的方法.這時候好像他們是沒有區別的.
但是如果例子中寫的是
module.exports = add;和
exports = add;就相當於把add方法直接賦值給module.exports和exports,而exports只是module的一個指向,所以將來如果返回的不是一個方法,而只是一個內容,但是可以賦值給module.exports,
然后返回的是一個方法.
當然,要注意,如果有多個方法的話,利用直接賦值給module.exports的話,后面的賦值會覆蓋前面的賦值.這個小細節要格外注意.
以上是我對exports與module.exports的區別的理解,希望大家可以增加漏點,訂正錯點.不喜勿噴,謝謝.
