JavaScript ES6 Module模塊詳解
0.什么是Module
歷史上,JavaScript 一直沒有模塊(module)體系,無法將一個大程序拆分成互相依賴的小文件,再用簡單的方法拼裝起來。其他語言都有這項功能,比如 Ruby 的require、Python 的import,甚至就連 CSS 都有@import,但是 JavaScript 任何這方面的支持都沒有,這對開發(fā)大型的、復(fù)雜的項目形成了巨大障礙。
在 ES6 之前,社區(qū)制定了一些模塊加載方案,最主要的有 CommonJS 和 AMD 兩種。ES6 模塊的設(shè)計思想是盡量的靜態(tài)化,使得編譯時就能確定模塊的依賴關(guān)系,以及輸入和輸出的變量。ES6 模塊不是對象,而是通過export命令顯式指定輸出的代碼,再通過import命令輸入。
模塊系統(tǒng)主要解決的問題:
- 模塊化的問題
- 消除全局變量
- 管理加載順序
1.Module 的加載
使用 < script >標簽加載模塊時需要添加 type=“module”。
1.1 方式一
<script type="module"> import module from "./module.js"; </script>
1.2 方式二
<script src="./module.js" type="module"></script>
2.導(dǎo)出和導(dǎo)入
2.1 一個模塊的導(dǎo)出可以被其它模塊導(dǎo)入,并訪問。
例1:使用About.js調(diào)用Base.js內(nèi)的Base對象,并在首頁打印。
index.html
<script type="module"> import About from "./js/About.js"; console.log(About); </script>
Base.js
const Base = { nick: 'admin', age: 19 } export default Base;
About.js
import Base from '../js/Base.js'; const src = `nick:${Base.nick},age:${Base.age}.`; export default src;
輸出結(jié)果:
nick:admin,age:19.
2.2 沒有導(dǎo)出,也可以將其導(dǎo)入
例2:About.js不導(dǎo)出,在首頁將其導(dǎo)入。
index.html
<script type="module"> import "./js/About.js"; </script>
About.js
const src = 'Hello World!'; console.log(src);
輸出結(jié)果:
Hello World!
2.3 被導(dǎo)入的代碼都會執(zhí)行一遍,也僅會執(zhí)行一遍
例3:導(dǎo)入3次About.js,觀察導(dǎo)出結(jié)果。
index.html
<script type="module"> import "./js/About.js"; import "./js/About.js"; import "./js/About.js"; </script>
About.js
const src = 'Hello World!'; console.log(src);
輸出結(jié)果:
Hello World!
3.export default 和對應(yīng)的 import
export default 用于導(dǎo)出一個默認值,一個模塊只能有一個。
使用 export default 進行導(dǎo)出時,import 的名字可以隨意起。
例4:使用 export default 進行導(dǎo)出,import 的名字隨意起。
index.html
<script type="module"> import bbb from "./js/About.js"; console.log(bbb); </script>
About.js
const src = 'Hello World!'; export default src;
輸出結(jié)果:
Hello World!
4.export 和對應(yīng)的 import
使用 export 進行導(dǎo)出時,import 的名字不能隨意起。
例5:使用 export 進行導(dǎo)出。
index.html
<script type="module"> import { age, nick } from "./js/About.js"; console.log(nick, age); </script>
About.js
const age = 18; export {age}; // export age; × // export const age = 18; √ export const nick = 'admin';
輸出結(jié)果:
admin 18
5.Module 的注意事項
1.模塊中,頂層的 this 指向 undefined;
2import 具有提升效果,會提升到整個模塊的頭部,率先執(zhí)行;
3.import 執(zhí)行的時候,代碼還沒執(zhí)行;
4.import 和 export 只能在模塊的頂層,不能在代碼塊中執(zhí)行;
5.import() 可以按條件導(dǎo)入;
6.復(fù)合寫法導(dǎo)出的,無法在當(dāng)前模塊中使用
復(fù)合寫法,導(dǎo)入后導(dǎo)出:
export About from './js/About.js';
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- CommonJS與ES6?Module的使用區(qū)別分析
- node.js的exports、module.exports與ES6的export、export default深入詳解
- ES6入門教程之Class和Module詳解
- ES6中module模塊化開發(fā)實例淺析
- ES6新特性之模塊Module用法詳解
- Node.JS中的模塊、exports和module講解
- Node.js?中的?module.exports?與?exports區(qū)別介紹
- Node.js中module.exports?和exports使用誤區(qū)
- 詳解Node.js中exports和module.exports的區(qū)別
- Node.js 中exports 和 module.exports 的區(qū)別
- node.js中module.exports與exports用法上的區(qū)別
- module.exports和exports使用誤區(qū)案例分析
相關(guān)文章
bootstrap table實現(xiàn)橫向合并與縱向合并
這篇文章主要為大家詳細介紹了bootstrap table實現(xiàn)橫向合并與縱向合并,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07根據(jù)后端返回的json數(shù)據(jù)快速生成ts類型的實現(xiàn)代碼
在前端開發(fā)中,我們通常需要處理來自后端或其他數(shù)據(jù)源的 JSON 數(shù)據(jù),這些數(shù)據(jù)可能非常復(fù)雜,包含不同類型的屬性,甚至嵌套對象和數(shù)組,為了更好地使用這些數(shù)據(jù),我們希望將其轉(zhuǎn)換為TypeScript類型定義,以獲得類型檢查和代碼智能提示的好處2023-10-10手機圖片預(yù)覽插件photoswipe.js使用總結(jié)
這篇文章主要為大家詳細總結(jié)了手機圖片預(yù)覽插件photoswipe.js使用方法,感興趣的小伙伴們可以參考一下2016-08-08關(guān)于function類中定義變量this的簡單說明
下面小編就為大家?guī)硪黄P(guān)于function類中定義變量this的簡單說明。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05html dom節(jié)點操作(獲取/修改/添加或刪除)
DOM 是關(guān)于如何獲取、修改、添加或刪除 HTML 元素的標準,下面為大家介紹下html dom節(jié)點操作,感興趣的朋友可以參考下2014-01-01javascript瀏覽器用戶代理檢測腳本實現(xiàn)方法
下面小編就為大家?guī)硪黄猨avascript瀏覽器用戶代理檢測腳本實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10