ES6新特性 模組

2021-09-18 04:16:23 字數 3103 閱讀 8784

在es6之前,實現模組化使用的是requirejsseajs(分別是基於amd規範的模組化庫,和基於cmd規範的模組化庫) 見後「js的模組化書寫規範」。

es6中引入了模組化,其設計思想是在編譯時就能確定模組的依賴關係及輸出和輸入的變數

es6的模組化分為匯入和匯出(exportimport)。

// a.js

var myname = "jt";

var myfunc = function() `;

}var myclass = class myclass

export ;

// b.js

import from "./a.js";

alert(myname);

alert(myfunc());

alert(myclass.msg);

as

// a.js

var myname = "jt";

export ;

// b.js

import from "./a.js";

console.log(exportname);

// a1.js

var myname = "a1";

export ;

// a2.js

var myname = "a2";

export ;

// b.js

import from "./a1.js";

import from "./a2.js";

console.log(name1, name2);

import

import  from "./***.js";

// a = {}; // error,不能直接修改引用的指向。

a.foo = "hello"; // 可以改物件的屬性值。

import  from "./***.js"; // 只執行一次

import from "./***.js";

import from "./***.js";

import from "./***.js";

// 相當於 import from "./***.js";

import  from "methods"; // error

var module = "methods";

import from module; // error

if (true) from "method1";

} else from "method2";

}

export default

使用export default匯出預設的變數,這個變數可以用任意變數來接收。

var a = "hello test";

export default a; // 只有乙個

import b from "./***.js"; // 不需要加{},使用任意變數接收。

復合使用

exportimport可以在同一模組使用

export  from "methods";

// import from "methods";

export ;

// 重新命名介面

export from "methods";

export from "methods";

export from "methods";

export * from "methods";

commonjs

commonjs規範誕生較早。nodejs就採用了commonjs

var clock = require("clock");

clock.start();

以上為載入模組的方式,這種寫法適合服務端(服務端是在本地磁碟讀取模組)。

但如果是在客戶端的瀏覽器中載入遠端(伺服器中)的模組,(同步載入)可能會「假死」,需要能非同步載入模組的方式。

於是有了amdcmd方案。

amd(asynchronous module definition) 非同步的模組定義

requirejs應用了amd規範先定義所有依賴,然後在載入完成後的callback中執行

語法:require([module], callback);,如:

require(["clock"], function(clock) );
amd雖然實現了非同步載入,但是它剛開始就把所有依賴寫出來,這不符合書寫的邏輯順序。

所以我們又有了新的需求:

我們需要可以像commonjs那樣在使用時在require,並且支援非同步載入後再執行。所以就出現了cmd,他不僅也非同步,而且更通用。

cmd(common module definition) 通用的模組定義

cmdseajs推崇的規範。其寫法如下:

define(function(require, exports, module) );
職責單一

es6新特性 ES6新特性(一)

var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...

ES6新特性須知

1.1es5之前函式想要賦預設值var funes5 function a,b,c 1.2es6開始函式想要賦預設值var funes6 function a 50,b 60,c 70 2.1es5之前字串拼接或者拼接屬性值只能如下var a lbj var b 50 var c name a ye...

es6新特性分享

1 字串查詢 es5使用是indexof 返回字元第一次出現的位置int值 es6新增了3個方法 includes startswith endwith 返回bool值 includes 是否包含字元 startswith 首字母是否包含字元 endwith 末尾是否包含字元 2 數值擴充套件 nu...