ES6 Module

2018-04-10

為什么要添加這一功能:

讓JavaScript可以分割成互相依賴的小文件,然后能用簡單的方法拼裝起來;有利于大型項(xiàng)目的管理。

設(shè)計(jì)思想:

盡量靜態(tài)化,解析時(shí)加載,解析時(shí)就能確定模塊間關(guān)系以及輸入輸出的變量。

語法:

export :
export var firstName = 'Michael';
// 或者
var firstName = 'Michael';
export  { firstName }
  • 最好將需要輸出的變量放在模塊最下方一并輸出,一目了然。
function v1 () {}
export {
   v1 as anotherName
}
  • 可以用as重命名輸出變量
  • 不能將export放入塊級作用域
import:
import { firstName } from './export'
  • 導(dǎo)入名要與被導(dǎo)出模塊對外接口名一致
  • import有提升效果,會(huì)提升到整個(gè)模塊頭部首先執(zhí)行
import { firstName as surname } from './export'
  • as重命名
export { es6 as default } from './export';
// 等同于
import { es6 } from './export';
export default es6;
  • 輸入輸出連寫; 推薦下面的寫法。
模塊的整體加載
import * as variableName from './export';
// 或者
module variableName from './export'
export default
export default function () {
   console.log('foo');
} // 匿名函數(shù)
function foo () {
   console.log('foo')
};
export default  foo; // 具名函數(shù)

import name from './export' // 即使時(shí)具名函數(shù)被輸出,也會(huì)被name這個(gè)變量名代替;
console.log(name()); // foo

  • 默認(rèn)輸出
  • 一個(gè)模塊只能有一個(gè)默認(rèn)輸出
import defaultVariable, { notDefault } from './export' // 輸出默認(rèn)和非默認(rèn)的變量/函數(shù)的寫法
  • export * 會(huì)忽略模塊的default方法

commonJs 和 ES6模塊加載比較

ES6 commonJs
模塊輸出是輸出值的引用 模塊輸出是輸出值的拷貝
原始值變,輸入值改變;且變量只讀,不可改變其地址,否則報(bào)錯(cuò) 在模塊引入后,模塊內(nèi)的任何變化不影響輸出后的值
遇到import,不執(zhí)行模塊,而是生成一個(gè)動(dòng)態(tài)的只讀引用;等到用時(shí),再在模塊中取值 require命令第一次加載該腳本,就會(huì)執(zhí)行整個(gè)腳本,然后在內(nèi)存中生成一個(gè)對象
不緩存 緩存
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容