ES6之前已經(jīng)出現(xiàn)了js模塊加載的方案,最主要的是CommonJS和AMD規(guī)范。commonjs主要應(yīng)用于服務(wù)器,實現(xiàn)同步加載,如nodejs。AMD規(guī)范應(yīng)用于瀏覽器,如requirejs,為異步加載。同時還有CMD規(guī)范,為同步加載方案如seaJS。
ES6在語言規(guī)格的層面上,實現(xiàn)了模塊功能,而且實現(xiàn)得相當(dāng)簡單,完全可以取代現(xiàn)有的CommonJS和AMD規(guī)范,成為瀏覽器和服務(wù)器通用的模塊解決方案。
ES6模塊主要有兩個功能:export和import
export用于對外輸出本模塊(一個文件可以理解為一個模塊)變量的接口
import用于在一個模塊中加載另一個含有export接口的模塊。
也就是說使用export命令定義了模塊的對外接口以后,其他JS文件就可以通過import命令加載這個模塊(文件)。如下圖(假設(shè)a和b文件在同一目錄下)
// a.js var sex="boy"; var echo=function(value){ console.log(value) } export {sex,echo} //通過向大括號中添加sex,echo變量并且export
// b.js 通過import獲取a.js文件的內(nèi)部變量,{}括號內(nèi)的變量來自于a.js文件export出的變量標(biāo)識符。 import {sex,echo} from "./a.js" console.log(sex) // boy echo(sex) // boy
a.js文件也可以按如下export語法寫,但不如上邊直觀,不太推薦。
// a.js export var sex="boy"; export var echo=function(value){ console.log(value) } //因為function echo(){}等價于 var echo=function(){}所以也可以寫成 export function echo(value){ console.log(value) }
以上是export與module的基本用法,再進行拓展學(xué)習(xí)
前面的例子可以看出,b.js使用import命令的時候,用戶需要知道a.js所暴露出的變量標(biāo)識符,否則無法加載。可以使用export default命令,為模塊指定默認(rèn)輸出,這樣就不需要知道所要加載模塊的變量名。
//a.js var sex="boy"; export default sex(sex不能加大括號) //原本直接export sex外部是無法識別的,加上default就可以了.但是一個文件內(nèi)最多只能有一個export default。 其實此處相當(dāng)于為sex變量值"boy"起了一個系統(tǒng)默認(rèn)的變量名default,自然default只能有一個值,所以一個文件內(nèi)不能有多個export default。
// b.js 本質(zhì)上,a.js文件的export default
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com