国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 桓仁| 罗城| 芷江| 鄂伦春自治旗| 涿鹿县| 梁平县| 永登县| 华容县| 盐边县| 申扎县| 封开县| 清丰县| 同江市| 松溪县| 靖西县| 永顺县| 太康县| 石楼县| 包头市| 阳信县| 毕节市| 滕州市| 延庆县| 大埔区| 米林县| 准格尔旗| 遵化市| 南雄市| 天水市| 金乡县| 普宁市| 博爱县| 澄城县| 淅川县| 东乌珠穆沁旗| 颍上县| 襄汾县| 酉阳| 靖州| 咸阳市| 城市|