首頁 web前端 js教程 詳解export default與require及exports,export區別與聯繫

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

Jun 22, 2017 am 11:53 AM
default export

還在為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的差異與聯繫模組功能主要由:export import構成

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

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

import

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

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

<code class=" javascript"><span class="token comment">// testA.js<span class="token keyword">var f <span class="token operator">= <span class="token string">&#39;Miel&#39;<span class="token punctuation">;<span class="token keyword">var name <span class="token operator">= <span class="token string">&#39;Jack&#39;<span class="token punctuation">;<span class="token keyword">var data<span class="token operator">= <span class="token number">1988<span class="token punctuation">;

export <span class="token punctuation">{f<span class="token punctuation">, name<span class="token punctuation">, data<span class="token punctuation">}<span class="token punctuation">;<br/></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
登入後複製

使用

export

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

import

指令來載入這個模組。

<code class=" javascript"><span class="token comment">// main.js
import <span class="token punctuation">{</span></span></code><code class=" javascript"><span class="token comment"><span class="token keyword"><span class="token operator"><span class="token string"><span class="token punctuation"><span class="token keyword"><span class="token operator"><span class="token string"><span class="token punctuation"><span class="token keyword"><span class="token operator"><span class="token number"><span class="token punctuation"><span class="token punctuation">f<span class="token punctuation">, name<span class="token punctuation">, data</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code><code class=" javascript"><span class="token comment"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation">} from <span class="token string">&#39;./testA&#39;<span class="token punctuation">;<br/></span></span></span></span></span></span></span></code>
登入後複製

export default可以這樣寫

<code class=" javascript"><span class="token comment">// export-default.js
export default <span class="token keyword">function <span class="token punctuation">(<span class="token punctuation">) <span class="token punctuation">{
  console<span class="token punctuation">.<span class="token function">log<span class="token punctuation">(<span class="token string">&#39;foo&#39;<span class="token punctuation">)<span class="token punctuation">;<span class="token punctuation">}<br/></span></span></span></span></span></span></span></span></span></span></span></span></code>
登入後複製
// 或者写成function foo() {
  console.log(&#39;foo&#39;);}
export default foo;
登入後複製
<code class=" javascript"><span class="token comment">// import-default.js
import customName from <span class="token string">&#39;./export-default&#39;<span class="token punctuation">;<span class="token function">customName<span class="token punctuation">(<span class="token punctuation">)<span class="token punctuation">;<span class="token comment"> // &#39;foo&#39;<br/><br/></span></span></span></span></span></span></span></span></code>
登入後複製

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

四、import與require


的差別與連結

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

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

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Vue Cli中出現'The requested module does not provide an export named' Error – 怎麼解決? Vue Cli中出現'The requested module does not provide an export named' Error – 怎麼解決? Aug 20, 2023 pm 07:25 PM

VueCli中出現'Therequestedmoduledoesnotprovideanexportnamed'Error–要怎麼解決?在Vue專案的開發過程中,我們可能會遇到'Therequestedmoduledoesnotprovideanexportnamed'的錯誤提示。這個錯誤提示一般會出現在引入第三方元件時

default gateway怎麼配置 default gateway怎麼配置 Dec 07, 2023 am 11:34 AM

設定default gateway的步驟:1、確定路由器的IP位址;2、開啟電腦的網路設定介面;3、設定網路連線;4、設定IPv4設定;5、輸入IP位址與子網路遮罩;6、設定預設閘道;7、配置DNS伺服器;8、儲存設定。詳細介紹:1、確定路由器的IP位址,預設閘道的位址通常是路由器的IP位址,在路由器的背面或使用手冊中,可以找到路由器的IP位址;2、開啟電腦的網路設定等等。

配置default gateway 配置default gateway Dec 07, 2023 pm 03:02 PM

設定default gateway的步驟:1、開啟控制面板;2、選擇網路和Internet;3、設定網路連線;4、設定IP位址;5、設定DNS伺服器位址;6、確認設定;7、重新啟動網路設備。詳細介紹:1、開啟控制台,在Windows系統中,點選開始選單,選擇「控制台」;2、選擇網路和Internet,在控制台中,選擇「網路和Internet」;3、設定網路連線等等。

export和export default的差別 export和export default的差別 Oct 12, 2023 am 10:24 AM

export和export default的區別是export關鍵字用於導出一個或多個變數、函數或類,而export default關鍵字用於導出一個預設的變數、函數或類別。在其他模組中,可以使用import關鍵字來匯入這些導出的變數、函數或類別。

怎麼配置default gateway 怎麼配置default gateway Dec 07, 2023 pm 02:56 PM

設定default gateway的步驟:1、了解網路環境;2、取得路由器IP位址;3、登入路由器管理介面;4、找到並設定WAN埠設定;5、設定預設閘道;6、儲存設定並登出;7、檢查網路連線是否正常。設定default gateway是網路設定中的重要步驟,它決定了主機透過哪個路由器存取網際網路。

深入解析PHP的default用法:為你揭開其奧秘 深入解析PHP的default用法:為你揭開其奧秘 Mar 23, 2024 am 08:06 AM

PHP是一種廣泛應用於Web開發領域的腳本語言,其靈活性和強大的功能讓開發者受益良多。在PHP中,預設值的設定是常見的操作,而其中的default關鍵字則扮演著至關重要的角色。本文將深入解析PHP中default的用法,為你揭開其奧秘,並結合具體的程式碼範例來幫助讀者更好地理解。 1.預設參數值在PHP中,我們可以為函數的參數設定預設值,以防止呼叫函數時

Java關鍵字中是否包含'default'? Java關鍵字中是否包含'default'? Apr 23, 2023 pm 01:13 PM

default是java關鍵字嗎:答:default是java8中的關鍵字,也叫做「virtualextensionmethods」。中文翻譯叫做「虛擬擴充方法」在介面裡包含了一些預設的使用方法。在介面進行擴充的時候,不會去和與介面相關的實作類別程式碼產生衝突。 default和java相關介紹:1.在此之前的介面是個雙面刃,能夠面向抽象但是不面向具體程式設計。 2.這個的缺點是需要修改介面的時候,要先修改全部實作介面的類別。 3.在無法為介面新增方法的時候不會影響已有的顯示,因此加入了預設的方法,為大家解決

MySQL約束之預設約束default與零填充約束zerofill怎麼實現 MySQL約束之預設約束default與零填充約束zerofill怎麼實現 May 31, 2023 pm 05:10 PM

預設約束MySQL預設值約束用來指定某列的預設值。新增預設約束方式1:default;方式2:altertable表名modify列名類型default預設值;createtablet_user10(idint,namevarchar(20),addressvarchar(20)default'北京'--指定預設約束);--altertable表名modify列名類型default預設值;createtablet_user11(idint,namevarchar(20),addr

See all articles