Module的語法和載入實現

2021-09-26 15:09:21 字數 1547 閱讀 4111

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上搜尋的結果 兩個解決方案的文章,...