module.exports與require和export default與export

require 用來加載代碼骂删,而 exports 和 module.exports 則用來導(dǎo)出代碼。

很多新手可能會(huì)迷惑于 exports 和 module.exports 的區(qū)別德澈,為了更好的理解 exports 和 module.exports 的關(guān)系,我們先來鞏固下 js 的基礎(chǔ)固惯。示例:

test.js

var a = {name: 1}
var b = a

console.log(a)
console.log(b)

b.name = 2
console.log(a)
console.log(b)

var b = {name: 3}
console.log(a)
console.log(b)

運(yùn)行 test.js 結(jié)果為:

{ name: 1 }
{ name: 1 }
{ name: 2 }
{ name: 2 }
{ name: 2 }
{ name: 3 }

解釋:a 是一個(gè)對(duì)象梆造,b 是對(duì) a 的引用,即 a 和 b 指向同一塊內(nèi)存葬毫,所以前兩個(gè)輸出一樣镇辉。當(dāng)對(duì) b 作修改時(shí),即 a 和 b 指向同一塊內(nèi)存地址的內(nèi)容發(fā)生了改變贴捡,所以 a 也會(huì)體現(xiàn)出來忽肛,所以第三四個(gè)輸出一樣。當(dāng) b 被覆蓋時(shí)烂斋,b 指向了一塊新的內(nèi)存屹逛,a 還是指向原來的內(nèi)存,所以最后兩個(gè)輸出不一樣汛骂。

明白了上述例子后罕模,我們只需知道三點(diǎn)就知道 exports 和 module.exports 的區(qū)別了:

  1. module.exports 初始值為一個(gè)空對(duì)象 {}
  2. exports 是指向的 module.exports 的引用
  3. require() 返回的是 module.exports 而不是 exports

Node.js 官方文檔的截圖證實(shí)了我們的觀點(diǎn):


image.png

我們經(jīng)常看到這樣的寫法:

exports = module.exports = {...}

上面的代碼等價(jià)于:

module.exports = {...}
exports = module.exports

原理很簡(jiǎn)單:module.exports 指向新的對(duì)象時(shí)香缺,exports 斷開了與 module.exports 的引用,那么通過 exports = module.exports 讓 exports 重新指向 module.exports歇僧。

export default與export

export default就是輸出一個(gè)叫做default的變量或方法图张,然后系統(tǒng)允許你為它取任意名字。所以诈悍,下面的寫法是有效的祸轮。

// modules.js
function add(x, y) {
  return x * y;
}
export {add as default};
// 等同于
// export default add;

// app.js
import { default as foo } from 'modules';
// 等同于
// import foo from 'modules';

下面比較一下默認(rèn)輸出和正常輸出。

// 第一組
export default function crc32() { // 輸出
  // ...
}

import crc32 from 'crc32'; // 輸入

// 第二組
export function crc32() { // 輸出
  // ...
};

import {crc32} from 'crc32'; // 輸入

上面代碼的兩組寫法侥钳,第一組是使用export default時(shí)适袜,對(duì)應(yīng)的import語句不需要使用大括號(hào);第二組是不使用export default時(shí)舷夺,對(duì)應(yīng)的import語句需要使用大括號(hào)苦酱。

export default命令用于指定模塊的默認(rèn)輸出售貌。顯然,一個(gè)模塊只能有一個(gè)默認(rèn)輸出疫萤,因此export default命令只能使用一次颂跨。所以,import命令后面才不用加大括號(hào)扯饶,因?yàn)橹豢赡芪ㄒ粚?duì)應(yīng)export default命令恒削。

本質(zhì)上,export default就是輸出一個(gè)叫做default的變量或方法尾序,然后系統(tǒng)允許你為它取任意名字钓丰。所以,下面的寫法是有效的每币。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末携丁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脯爪,更是在濱河造成了極大的恐慌则北,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痕慢,死亡現(xiàn)場(chǎng)離奇詭異尚揣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掖举,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門快骗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人塔次,你說我怎么就攤上這事方篮。” “怎么了励负?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵藕溅,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我继榆,道長(zhǎng)巾表,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任略吨,我火速辦了婚禮集币,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘翠忠。我一直安慰自己鞠苟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著当娱,像睡著了一般吃既。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趾访,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天态秧,我揣著相機(jī)與錄音,去河邊找鬼扼鞋。 笑死申鱼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的云头。 我是一名探鬼主播捐友,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼溃槐!你這毒婦竟也來了匣砖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤昏滴,失蹤者是張志新(化名)和其女友劉穎猴鲫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谣殊,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拂共,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了姻几。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宜狐。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蛇捌,靈堂內(nèi)的尸體忽然破棺而出抚恒,到底是詐尸還是另有隱情,我是刑警寧澤络拌,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布俭驮,位于F島的核電站,受9級(jí)特大地震影響春贸,放射性物質(zhì)發(fā)生泄漏混萝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一祥诽、第九天 我趴在偏房一處隱蔽的房頂上張望譬圣。 院中可真熱鬧瓮恭,春花似錦雄坪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绳姨。三九已至,卻和暖如春阔挠,著一層夾襖步出監(jiān)牢的瞬間飘庄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工购撼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跪削,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓迂求,卻偏偏與公主長(zhǎng)得像碾盐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揩局,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容