詳解export default與require及exports,export區別與聯繫

PHP中文网
發布: 2017-06-22 11:53:37
原創
3640 人瀏覽過

還在為module.exports、exports、export和export default,import和require區別與聯繫發愁嗎,這篇基本上就夠了!

一、先搞清楚一個基本問題:

module.exportsexports是屬於CommonJS模組規格! (不清楚commonjs?大神請這邊逛一逛commonjs規格)

#exportexport default是屬於ES6文法(不清楚ES6?大神請這邊逛一逛ES6模組)

同樣importrequire分別屬於ES6和CommonJS!

二、知道屬於哪一塊的語法了還有一個明確點:

module.exportsexports、export##export default都是匯出模組;

#import##importrequire則是

導入模組。

所以現在就不要搞混了,module.exports導出對應require導入,export導出對應import導入。餵!等等,怎麼說到module.exports導出對應require導入,export導出對應import導入,那還有exports和export default呢! ?那我們繼續。三、module.exports
exports的差異與聯繫

##講到這裡就得稍微提一下模組化:

Node應用由模組組成,採用CommonJS模組規格。根據這個規範,每個檔案就是一個模組,有自己的作用域。在一個檔案裡面定義的變數、函數、類,都是私有的,對其他檔案不可見。CommonJS規格規定,每個模組內部,module變數代表目前模組。這個變數是一個對象,它的exports

屬性(即

module.exports

)是對外的介面。載入某個模組,其實是載入該模組的

module.exports

屬性。

var x = 5;var addX = function (value) { return value + x;};module.exports.x = x;module.exports.addX = addX;
登入後複製
上面程式碼透過module.exports

輸出變數

x和函數addX

require

方法用來載入模組。

var example = require('./example.js');console.log(example.x); // 5console.log(example.addX(1)); // 6
登入後複製

看了剛剛這段commonjs規範上面的介紹可以知道以下區別與聯繫:

其實exports變數是指向module.exports,載入模組實際上是加載該模組的

module.exports。這等同在每個模組頭部,有一行這樣的指令。

var exports = module.exports;
登入後複製
於是我們可以直接在 exports 物件上添加方法,表示對外輸出的接口,如同在module.exports上添加一樣。注意,不能直接將exports變數指向一個值,因為這樣等於切斷了exports與module.exports的聯繫。

三、exportexport default的差異與聯繫模組功能主要由:exportimport構成

export匯出模組的對外接口,import指令匯入其他模組暴露的介面。

export其實和export default就是寫法上面有點差別,一個是導出一個個單獨接口,一個是預設導出一個整體接口。使用

import

指令的時候,使用者需要知道要載入的變數名或函數名,否則無法載入。這裡就有一個簡單寫法不用去知道有哪些具體的暴露介面名,就用

export default指令,為模組指定預設輸出。export可以這樣寫

// testA.jsvar f = 'Miel';var name = 'Jack';var data= 1988; export {f, name, data};
登入後複製

使用

export

指令定義了模組的對外介面以後,其他JS 檔案就可以透過

import

指令來載入這個模組。

// main.js import {f, name, data} from './testA';
登入後複製

export default可以這樣寫

// export-default.js export default function () { console.log('foo');}
登入後複製
// 或者写成function foo() { console.log('foo');} export default foo;
登入後複製
// import-default.js import customName from './export-default';customName(); // 'foo'

登入後複製

下面比較一下export default和export 輸出。可以看到第一組是使用,語句不需要使用大括號;第二組使用,對應的語句需要使用大括號,一個模組只能有一個預設輸出,所以只能使用一次。

四、import與require


的差別與連結

#########看了上面其實已經清楚了, import和require是分別屬於ES6和CommonJS的兩種導入模組的語法而已。 ######

以上是詳解export default與require及exports,export區別與聯繫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!