在es6之前,實現模組化使用的是requirejs
或seajs
(分別是基於amd
規範的模組化庫,和基於cmd
規範的模組化庫) 見後「js的模組化書寫規範」。
es6中引入了模組化,其設計思想是在編譯時就能確定模組的依賴關係及輸出和輸入的變數。
es6的模組化分為匯入和匯出(export
import
)。
// 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"; // 不需要加{},使用任意變數接收。
復合使用
export
和import
可以在同一模組使用
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();
以上為載入模組的方式,這種寫法適合服務端(服務端是在本地磁碟讀取模組)。
但如果是在客戶端的瀏覽器中載入遠端(伺服器中)的模組,(同步載入)可能會「假死」,需要能非同步載入模組的方式。
於是有了amd
和cmd
方案。
amd
(asynchronous module definition) 非同步的模組定義
requirejs
應用了amd規範
:先定義所有依賴,然後在載入完成後的callback中執行
語法:require([module], callback);
,如:
require(["clock"], function(clock) );
amd
雖然實現了非同步載入,但是它剛開始就把所有依賴寫出來,這不符合書寫的邏輯順序。
所以我們又有了新的需求:
我們需要可以像commonjs
那樣在使用時在require
,並且支援非同步載入後再執行。所以就出現了cmd
,他不僅也非同步,而且更通用。
cmd
(common module definition) 通用的模組定義
cmd
是seajs
推崇的規範。其寫法如下:
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...