1.在es6之前,社群制定了一些模組載入方案,最主要的有commonjs 和amd兩種。前者用於伺服器,後者用於瀏覽器。es6在語言標準的層面,實現了模組功能,實現簡單,完全可以取代commomjs和amd模組,成為瀏覽器與伺服器通用的模組解決方案。
es6模組的設計思想是盡量的靜態化,使得編譯時就能確定模組的依賴關係,以及輸入和輸出的變數。commomjs和amd模組,都只在執行時確定這線東西。
es6模組不是物件,而是通過export命令顯式指定輸出的**,再通過import命令輸入。
除了靜態載入帶來的各種好處,es6 模組還有以下好處。
2.es6 的模組自動採用嚴格模式,不管你有沒有在模組頭部加上"use strict";
。
3.export命令:用於規定模組的對外介面
// 報錯
export 1;
// 報錯
var m = 1;
export m;
// 寫法一
export var m = 1;
// 寫法二
var m = 1;
export ;
// 寫法三
var n = 1;
export ;
// 報錯
function f() {}
export f;
// 正確
export function f() {};
// 正確
function f() {}
export ;
4.import命令
使用import命令輸入的變數都是唯讀的
foo();
import from 'my_module';
上面的**不會報錯,因為import的執行早於foo的呼叫。這種行為的本質是,import命令是編譯階段執行的,在**執行之前。由於import是靜態執行,所以不能使用表示式和變數(這些是執行時才能得到結果的語法結構)。
5.export default命令
// 第一組
export default function crc32()
import crc32 from 'crc32'; // 輸入
// 第二組
export function crc32() ;
import from 'crc32'; // 輸入
//上面**的兩組寫法,第一組是使用export default時,對應的import語句不需要使用大括號;第二組是不使用export default時,對應的import語句需要使用大括號。
6.瀏覽器載入
7.瀏覽器載入模組的規則
瀏覽器載入 es6 模組,也使用瀏覽器對於帶有
type="module"
的對於外部的模組指令碼(上例是
foo.js
),有幾點需要注意。
ES6中Module語法與載入實現
在前三篇文章中一次介紹了commonjs,amd,cmd,他們都需要單獨載入檔案 在阮一峰老師的module一文中寫到,es6 在語言標準的層面上,實現的模組功能,而且實現得相當簡單,完全可以取代 commonjs 和 amd 規範,成為瀏覽器和伺服器通用的模組解決方案 commonjs requi...
ES6 Module的載入實現
瀏覽器載入 傳統方法 在html網頁中,瀏覽器通過載入規則 瀏覽器載入es6模板,也是使用網頁中插入乙個模組foo.js,由於type屬性設為module,所以瀏覽器知道這是乙個 es6 模組。瀏覽器對於帶有type module 的es6模組允許內嵌在網頁中,語法行為與載入外部指令碼一致 外部的模...
Module載入時出現的問題
在載入多個module時出現了型別轉換展示,資訊如下 typeerror error 1034 強制轉換型別失敗 無法將 mx.managers dragmanagerimpl 3a37291 轉換為 mx.managers.idragmanager。從google上搜尋的結果 兩個解決方案的文章,...