ES6模塊化的import和export用法方法總結(jié)
ES6之前已經(jīng)出現(xiàn)了js模塊加載的方案,最主要的是CommonJS和AMD規(guī)范。commonjs主要應(yīng)用于服務(wù)器,實(shí)現(xiàn)同步加載,如nodejs。AMD規(guī)范應(yīng)用于瀏覽器,如requirejs,為異步加載。同時(shí)還有CMD規(guī)范,為同步加載方案如seaJS。
ES6在語(yǔ)言規(guī)格的層面上,實(shí)現(xiàn)了模塊功能,而且實(shí)現(xiàn)得相當(dāng)簡(jiǎn)單,完全可以取代現(xiàn)有的CommonJS和AMD規(guī)范,成為瀏覽器和服務(wù)器通用的模塊解決方案。
ES6模塊主要有兩個(gè)功能:export和import
export用于對(duì)外輸出本模塊(一個(gè)文件可以理解為一個(gè)模塊)變量的接口
import用于在一個(gè)模塊中加載另一個(gè)含有export接口的模塊。
也就是說(shuō)使用export命令定義了模塊的對(duì)外接口以后,其他JS文件就可以通過(guò)import命令加載這個(gè)模塊(文件)。如下圖(假設(shè)a和b文件在同一目錄下)
// a.js
var sex="boy";
var echo=function(value){
console.log(value)
}
export {sex,echo}
//通過(guò)向大括號(hào)中添加sex,echo變量并且export輸出,就可以將對(duì)應(yīng)變量值以sex、echo變量標(biāo)識(shí)符形式暴露給其他文件而被讀取到
//不能寫(xiě)成export sex這樣的方式,如果這樣就相當(dāng)于export "boy",外部文件就獲取不到該文件的內(nèi)部變量sex的值,因?yàn)闆](méi)有對(duì)外輸出變量接口,只是輸出的字符串。
// b.js
通過(guò)import獲取a.js文件的內(nèi)部變量,{}括號(hào)內(nèi)的變量來(lái)自于a.js文件export出的變量標(biāo)識(shí)符。
import {sex,echo} from "./a.js"
console.log(sex) // boy
echo(sex) // boy
a.js文件也可以按如下export語(yǔ)法寫(xiě),但不如上邊直觀,不太推薦。
// a.js
export var sex="boy";
export var echo=function(value){
console.log(value)
}
//因?yàn)閒unction echo(){}等價(jià)于 var echo=function(){}所以也可以寫(xiě)成
export function echo(value){
console.log(value)
}
以上是export與module的基本用法,再進(jìn)行拓展學(xué)習(xí)
前面的例子可以看出,b.js使用import命令的時(shí)候,用戶(hù)需要知道a.js所暴露出的變量標(biāo)識(shí)符,否則無(wú)法加載??梢允褂胑xport default命令,為模塊指定默認(rèn)輸出,這樣就不需要知道所要加載模塊的變量名。
//a.js var sex="boy"; export default sex(sex不能加大括號(hào)) //原本直接export sex外部是無(wú)法識(shí)別的,加上default就可以了.但是一個(gè)文件內(nèi)最多只能有一個(gè)export default。 其實(shí)此處相當(dāng)于為sex變量值"boy"起了一個(gè)系統(tǒng)默認(rèn)的變量名default,自然default只能有一個(gè)值,所以一個(gè)文件內(nèi)不能有多個(gè)export default。
// b.js 本質(zhì)上,a.js文件的export default輸出一個(gè)叫做default的變量,然后系統(tǒng)允許你為它取任意名字。所以可以為import的模塊起任何變量名,且不需要用大括號(hào)包含 import any from "./a.js" import any12 from "./a.js" console.log(any,any12) // boy,boy
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
jQuery 實(shí)現(xiàn)倒計(jì)時(shí)天,時(shí),分,秒功能
本文通過(guò)html代碼和js代碼給大家介紹了實(shí)現(xiàn)倒計(jì)時(shí)天,時(shí),分,秒功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07
微信小程序三級(jí)聯(lián)動(dòng)選擇器使用方法
這篇文章主要為大家詳細(xì)介紹了微信小程序三級(jí)聯(lián)動(dòng)選擇器使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02
js實(shí)現(xiàn)自動(dòng)輪換選項(xiàng)卡
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)自動(dòng)輪換選項(xiàng)卡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
實(shí)現(xiàn)無(wú)刷新聯(lián)動(dòng)例子匯總
最近在用asp.net做項(xiàng)目的時(shí)候,遇到需要實(shí)現(xiàn)無(wú)刷新聯(lián)動(dòng)的需求,度娘了一下,這里匯總一下幾個(gè)比較實(shí)用的例子,有需要的小伙伴可以參考下。2015-05-05
JavaScript開(kāi)發(fā)者必備的10個(gè)Sublime Text插件
Sublime Text幾乎是任何開(kāi)發(fā)者在其工具箱的必備應(yīng)用程序,這篇文章主要介紹了JavaScript開(kāi)發(fā)者必備的10個(gè)Sublime Text插件,感興趣的小伙伴們可以參考一下2016-02-02
JavaScript在IE和Firefox瀏覽器下的7個(gè)差異兼容寫(xiě)法小結(jié)
盡管那需要用長(zhǎng)串的、沉悶的不同分支代碼來(lái)應(yīng)付不同瀏覽器的日子已經(jīng)過(guò)去,偶爾還是有必要做一些簡(jiǎn)單的區(qū)分和目標(biāo)檢測(cè)來(lái)確保某塊代碼能在用戶(hù)的機(jī)器上正常運(yùn)行。2010-06-06
Javascript模仿淘寶信用評(píng)價(jià)實(shí)例(附源碼)
這篇文章主要介紹了Javascript模仿淘寶信用評(píng)價(jià)功能實(shí)現(xiàn)方法,以完整實(shí)例形式分析了JavaScript響應(yīng)鼠標(biāo)事件動(dòng)態(tài)改變頁(yè)面元素的相關(guān)技巧,并附帶了完整的實(shí)例代碼供讀者下載參考,需要的朋友可以參考下2015-11-11
Firefox下提示illegal character并出現(xiàn)亂碼的原因
Firefox下提示illegal character并出現(xiàn)亂碼的問(wèn)題,時(shí)間是是因?yàn)榫幋a的問(wèn)題導(dǎo)致。2010-03-03
在javaScript中檢測(cè)數(shù)據(jù)類(lèi)型的幾種方式小結(jié)
在用javaScript編程的過(guò)程中,我們經(jīng)常會(huì)遇到這樣一個(gè)問(wèn)題,就是需要檢測(cè)一個(gè)數(shù)據(jù)或變量的類(lèi)型,本篇文章主要介紹了在javaScript中檢測(cè)數(shù)據(jù)類(lèi)型的幾種方式小結(jié),有興趣的可以了解一下。2017-03-03

