您好,登錄后才能下訂單哦!
這篇文章給大家介紹Node.js中exports與module.exports有什么不同,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
1. 方式一:用exports
//a.js exports.log =function (str) { console.log(str); }
//b.js var s = require("./a"); s.log("哈哈哈哈");
2. 方式二:用module.exports
//a.js module.exports = function (str) { console.log(str); } //b.js var s = require("./a"); s("嘻嘻嘻嘻");
如果將第一種方式的exports按照第二種方式寫成下面這樣就會出錯:
//a.js exports = function (str) { console.log(str); } //b.js var s = require("./a"); s("哈哈哈哈");
exports
和module.exports
的初始值指向的是空對象,即{}
。從源碼可以看到,其實模塊的require
方法實質上是調用了_load
方法,而_load
方法,最終返回的是module.exports
來分析一下出錯的原因。
由于最開始的時候,exports
和module.exports
都指向同一個對象。
第一種方式,是在給這個空對象{}
添加屬性,又因為module.exports
也是指向這個對象的,所以最終require
方法返回的module.exports
是指向了這個具有log
方法的對象的,可以引用到模塊。
第二種方式是讓module.exports
指向一片新的內存空間,exports
指向的仍然是{}
,但是由于require
方法返回的是module.exports
,所以最終也能引入模塊。
但是最后那種寫法是讓exports
指向一片新的內存空間,module.exports
指向的仍然還是{}
,那么最終require
方法是將module.exports
返回,所以會導致報錯,說s不是一個function。
所以:
請牢記:require
方法返回的是module.exports
!
關于Node.js中exports與module.exports有什么不同就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。