"Code tailor",爲前端開發者提供技術相關資訊以及系列基礎文章,微信關注「小和山的菜鳥們」公衆號,及時獲取最新文章。
在開始學習以前,咱們想要告訴您的是,本文章是對阮一峯《ECMAScript6 入門》一書中 "Module" 章節的總結,若是您已掌握下面知識事項,則可跳過此環節直接進入題目練習javascript
若是您對某些部分有些遺忘,👇🏻 已經爲您準備好了!前端
Module 的學習java
歷史上,JavaScript 一直沒有模塊(module)體系,沒法將一個大程序拆分紅互相依賴的小文件,再用簡單的方法拼裝起來es6
ES6 模塊的設計思想是儘可能的靜態化,使得編譯時就能肯定模塊的依賴關係,以及輸入和輸出的變量。瀏覽器
模塊功能主要由兩個命令構成:export 和 import。export 命令用於規定模塊的對外接口,import 命令用於輸入其餘模塊提供的功能。微信
一個模塊就是一個獨立的文件。該文件內部的全部變量,外部沒法獲取。若是你但願外部可以讀取模塊內部的某個變量,就必須使用 export 關鍵字輸出該變量。下面是一個 JS 文件,裏面使用 export 命令輸出變量。
// profile.js export var firstName = 'Michael' export var lastName = 'Jackson' export var year = 1958 //等同於下列代碼 var firstName = 'Michael' var lastName = 'Jackson' var year = 1958 export { firstName, lastName, year }
上面代碼是 profile.js 文件,保存了用戶信息。ES6 將其視爲一個模塊,裏面用 export 命令對外部輸出了三個變量。模塊化
export function multiply(x, y) { return x * y; }; 一般狀況下,export輸出的變量就是原本的名字,可是可使用as關鍵字重命名 function v1() { ... } function v2() { ... } export { v1 as streamV1, v2 as streamV2, v2 as streamLatestVersion };
另:export 語句輸出的接口,與其對應的值是動態綁定關係,即經過該接口,能夠取到模塊內部實時的值。
使用 export 命令定義了模塊的對外接口之後,其餘 JS 文件就能夠經過 import 命令加載這個模塊。
// main.js import { firstName, lastName, year } from './profile.js' function setName(element) { element.textContent = firstName + ' ' + lastName } //import命令接受一對大括號,裏面指定要從其餘模塊導入的變量名。大括號裏面的變量名, //必須與被導入模塊(profile.js)對外接口的名稱相同。
import { lastName as surname } from './profile.js'
import { a } from './xxx.js' a = {} // Syntax Error : 'a' is read-only; // 可是若是a是一個對象,改寫a的屬性是容許的 import { a } from './xxx.js' a.foo = 'hello' // 合法操做
import { myMethod } from 'util' // util是模塊文件名,因爲不帶有路徑,必須經過配置,告訴引擎怎麼取到這個模塊。
除了指定加載某個輸出值,還可使用總體加載,即用星號(*)指定一個對象,全部輸出值都加載在這個對象上面。
// circle.js export function area(radius) { return Math.PI * radius * radius } export function circumference(radius) { return 2 * Math.PI * radius }
import * as circle from './circle' console.log('圓面積:' + circle.area(4)) console.log('圓周長:' + circle.circumference(14))
爲了給用戶提供方便,讓他們不須要知道所要加載的變量名或函數名,就能加載模塊。
// export-default.js export default function () { console.log('foo') }
上面代碼是一個模塊文件 export-default.js,它的默認輸出是一個函數。其餘模塊加載該模塊時,import 命令能夠爲該匿名函數指定任意名字。函數
// import-default.js import customName from './export-default' customName() // 'foo'
一:關於 ES6 的 module 模塊,下列說法錯誤的是?學習
二:如下代碼輸出結果爲()設計
// module.js export default () => 'Hello world' export const name = 'Lydia' // index.js import * as data from './module' console.log(data)
{ default: function default(), name: "Lydia" }
{ default: function default() }
{ default: "Hello world", name: "Lydia" }
Global object of module.js
三:簡述 export 和 export default 的區別
1、
Answer: D
2、
Answer: A
使用import*
做爲名稱語法,咱們從module.js
歸檔到index.js
將建立名爲 data 的新對象文件。在module.js
文件有兩個導出:默認導出和命名導出。默認導出是一個函數,它返回字符串「helloworld」
,命名的導出是一個名爲name
的變量,該變量的值爲字符串「Lydia」
。
數據對象具備默認導出的默認屬性,其餘屬性具備命名導出的名稱及其相應值。
3、
export default
的對象、變量、函數、類,能夠沒有名字。export
的必須有名字 export default
在一個模塊中只能有一個,固然也能夠沒有。export
在一個模塊中能夠有多個 export default
對應的import
和export
有所區別:有default
的導入不須要{}
ES 6 系列的 Module,咱們到這裏結束啦,謝謝各位對做者的支持!大家的關注和點贊,將會是咱們前進的最強動力!謝謝你們!