JavaScript ES6中export、import與export default的用法和區(qū)別
前言
相信很多人都使用過export、export default、import,然而它們到底有什么區(qū)別呢? 在看他們之間的區(qū)別之前,我們先來看看它們的用法。
ES6 import和export的用法
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在語言規(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接口的模塊。
也就是說使用export命令定義了模塊的對(duì)外接口以后,其他JS文件就可以通過import命令加載這個(gè)模塊(文件)。如下(假設(shè)a和b文件在同一目錄下)
// a.js var sex="boy"; var echo=function(value){ console.log(value) } export {sex,echo} //通過向大括號(hào)中添加sex,echo變量并且export輸出,就可以將對(duì)應(yīng)變量值以sex、echo變量標(biāo)識(shí)符形式暴露給其他文件而被讀取到 //不能寫成export sex這樣的方式,如果這樣就相當(dāng)于export "boy",外部文件就獲取不到該文件的內(nèi)部變量sex的值,因?yàn)闆]有對(duì)外輸出變量接口,只是輸出的字符串。
// b.js 通過import獲取a.js文件的內(nèi)部變量,{}括號(hào)內(nèi)的變量來自于a.js文件export出的變量標(biāo)識(shí)符。 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) } //因?yàn)閒unction echo(){}等價(jià)于 var echo=function(){}所以也可以寫成 export function echo(value){ console.log(value) }
以上是export與module的基本用法,再進(jìn)行拓展學(xué)習(xí)
前面的例子可以看出,b.js使用import命令的時(shí)候,用戶需要知道a.js所暴露出的變量標(biāo)識(shí)符,否則無法加載。可以使用export default命令,為模塊指定默認(rèn)輸出,這樣就不需要知道所要加載模塊的變量名。
//a.js var sex="boy"; export default sex(sex不能加大括號(hào)) //原本直接export sex外部是無法識(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
ES6中export、import與export default區(qū)別
在JavaScript ES6中,export與export default均可用于導(dǎo)出常量、函數(shù)、文件、模塊等,你可以在其它文件或模塊中通過import+(常量 | 函數(shù) | 文件 | 模塊)名的方式,將其導(dǎo)入,以便能夠?qū)ζ溥M(jìn)行使用,但在一個(gè)文件或模塊中,export、import可以有多個(gè),export default僅有一個(gè)。
具體使用:
1、
//demo1.js export const str = 'hello world' export function f(a){ return a+1 }
對(duì)應(yīng)的導(dǎo)入方式:
//demo2.js import { str, f } from 'demo1' //也可以分開寫兩次,導(dǎo)入的時(shí)候帶花括號(hào)
2、
//demo1.js export default const str = 'hello world'
對(duì)應(yīng)的導(dǎo)入方式:
//demo2.js import str from 'demo1' //導(dǎo)入的時(shí)候沒有花括號(hào)
總結(jié)
好了,以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
CKEditor 4.4.1 添加代碼高亮顯示插件功能教程【使用官方推薦Code Snippet插件】
這篇文章主要介紹了CKEditor 4.4.1 添加代碼高亮顯示插件功能,涉及ckeditor使用官方推薦Code Snippet插件的相關(guān)操作布局與使用注意事項(xiàng),需要的朋友可以參考下2019-06-06JavaScript模擬重力狀態(tài)下拋物運(yùn)動(dòng)的方法
這篇文章主要介紹了JavaScript模擬重力狀態(tài)下拋物運(yùn)動(dòng)的方法,實(shí)例分析了javascript操作dom元素模擬運(yùn)動(dòng)的方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03javascript 小數(shù)取整簡(jiǎn)單實(shí)現(xiàn)方式
這篇文章主要介紹了javascript 小數(shù)取整d的簡(jiǎn)單實(shí)現(xiàn)方式,需要的朋友可以參考下2014-05-05詳解設(shè)置Webstorm 利用babel將ES6自動(dòng)轉(zhuǎn)碼成ES5
這篇文章主要介紹了詳解設(shè)置Webstorm 利用babel將ES6自動(dòng)轉(zhuǎn)碼成ES5,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-12-12