// 報錯
export 1;
// 報錯
var m = 1;
export m;
以上寫法都會報錯,第一種寫法直接輸出1,第二種寫法通過變數m,還是直接輸出1。1只是乙個值,不是介面
export匯出時
規定的是對外的介面,就是你匯出的東西必須有乙個名字,匯入時才能找到這個名字,第二個方法之所以報錯,是因為不用大括號括起來,在編譯的時候m就變成了1,所以需要用把m變成乙個變數
第一種起名字的方法
export var/let/const 名字=值
第二種起名字的方法
var/let/const 變數=值
export 或 export
第三種起名字的方法
export default 值 //其實就是把值賦值給default變數,後面會講到
import from 'my_module';
import from 'my_module';
// 等同於
import from 'my_module';
上面**中,雖然foo
和bar
在兩個語句中載入,但是它們對應的是同乙個my_module
例項。也就是說,import
語句是 singleton 模式。
整體匯入
用*代替模組中所有可匯出的內容,並用乙個物件接收,但這個物件不允許執行時改變
import from './circle';
console.log('圓面積:' + area(4));
console.log('圓周長:' + circumference(14));
import * as circle from './circle';
console.log('圓面積:' + circle.area(4));
console.log('圓周長:' + circle.circumference(14));
import * as circle from './circle';
// 下面兩行都是不允許的
circle.foo = 'hello';
circle.area = function () {};
為了給使用者提供方便,讓他們不用閱讀文件就能載入模組,就要用到export default
命令,為模組指定預設輸出。
// export-default.js
export default function ()
上面**是乙個模組檔案export-default.js
,它的預設輸出是乙個函式。
其他模組載入該模組時,import
命令可以為該匿名函式指定任意名字。
// import-default.js
import customname from './export-default';
customname(); // 'foo'
上面**的import
命令,可以用任意名稱指向export-default.js
輸出的方法,這時就不需要知道原模組輸出的函式名。需要注意的是,這時import
命令後面,不使用大括號。
我們比較一下預設輸出和正常輸出。
// 第一組
export default function crc32()
import crc32 from 'crc32'; // 輸入
// 第二組
export function crc32() ;
import from 'crc32'; // 輸入
上面**的兩組寫法,第一組是使用export default
時,對應的import
語句不需要使用大括號;第二組是不使用export default
時,對應的import
語句需要使用大括號。
export default
命令用於指定模組的預設輸出。顯然,乙個模組只能有乙個預設輸出,因此export default
命令只能使用一次。所以,import命令後面才不用加大括號,因為只可能唯一對應export default
命令。
本質上,export default
就是輸出乙個叫做default
的變數或方法,然後系統允許你為它取任意名字。所以,下面的寫法是有效的。
// modules.js
function add(x, y)
export ;
// 等同於
// export default add;
import from 'modules';
// 等同於
// import foo from 'modules';
正是因為export default
命令其實只是輸出乙個叫做default
的變數,所以它後面不能跟變數宣告語句。
// 正確
export var a = 1;
// 正確
var a = 1;
export default a;
// 錯誤
export default var a = 1;
export default
命令的本質是將後面的值,賦給default
變數,所以可以直接將乙個值寫在export default
之後。
// 正確
export default 42;
// 報錯
export 42;
匯入預設方法
import _ from 'lodash';
如果想在一條import
語句中,同時輸入預設方法和其他介面,可以寫成下面這樣。
import _, from 'lodash';
以上內容摘自阮大神的 es6和自己總結 ES6中Module語法與載入實現
在前三篇文章中一次介紹了commonjs,amd,cmd,他們都需要單獨載入檔案 在阮一峰老師的module一文中寫到,es6 在語言標準的層面上,實現的模組功能,而且實現得相當簡單,完全可以取代 commonjs 和 amd 規範,成為瀏覽器和伺服器通用的模組解決方案 commonjs requi...
ES6語法總結
1 物件的寫法 es5中物件 es6中物件 注意這種寫法的屬性名稱和值變數是同乙個名稱才可以簡寫,否則要想es5那樣的寫法,例如 2 在物件中的方法的寫法 es5中物件 substrict function es6中物件 substrict 3 物件的匯出寫法 es5兩種形式 1 module.ex...
常用es6語法總結
一.let var,const var沒有塊級作用域,定義後在當前閉包中都可以訪問,如果變數名重複,就會覆蓋前面定義的變數,並且也有可能被其他人更改。for var i 0 i 3 i 0 結果會列印3次3,原因是var 沒有塊級作用域,而let有自己的塊級作用域,所以不會出現這種情況。使用 let...