国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解Node.js中exports和module.exports的區(qū)別

2019-11-19 16:47:37
字體:
來源:轉載
供稿:網友

今天看了下node.js的require方法的源碼,終于搞清楚exports和module.exports的區(qū)別了。

我們知道,node.js的模塊暴露有兩種方法。

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("哈哈哈哈");

exportsmodule.exports的初始值指向的是空對象,即{}。從源碼可以看到,其實模塊的require方法實質上是調用了_load方法,而_load方法,最終返回的是module.exports

 

來分析一下出錯的原因。

由于最開始的時候,exportsmodule.exports都指向同一個對象。

第一種方式,是在給這個空對象{}添加屬性,又因為module.exports也是指向這個對象的,所以最終require方法返回的module.exports是指向了這個具有log方法的對象的,可以引用到模塊。

第二種方式是讓module.exports指向一片新的內存空間,exports指向的仍然是{},但是由于require方法返回的是module.exports,所以最終也能引入模塊。

但是最后那種寫法是讓exports指向一片新的內存空間,module.exports指向的仍然還是{},那么最終require方法是將module.exports返回,所以會導致報錯,說s不是一個function。

所以:

請牢記:require方法返回的是module.exports!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乃东县| 兴国县| 修水县| 巴中市| 公主岭市| 元朗区| 桑日县| 东乌珠穆沁旗| 铁岭县| 安岳县| 江川县| 怀柔区| 西贡区| 长治市| 渝中区| 隆安县| 闵行区| 南投县| 临洮县| 雷州市| 平罗县| 德格县| 灵宝市| 香格里拉县| 永昌县| 肇东市| 江津市| 墨玉县| 墨脱县| 常熟市| 云和县| 乐清市| 淳安县| 西盟| 昆明市| 邮箱| 明水县| 英山县| 治多县| 东乌| 麻阳|