JavaScript|模塊化編程

????????通常我們一個項目需要幾個人來開發(fā),會出現(xiàn)很多的函數(shù)、文件等,不易管理復用。為了復用代碼,我們需要模塊化代碼。但我們知道,目前js沒有支持模塊化(面向?qū)ο?、類等),要等到最新版?-ES6。而現(xiàn)在大家默認使用一些方法來實現(xiàn)js的模塊化編程,下面就簡單介紹一下。

一、常用模塊化方式。

模塊化就是將若干個方法、屬性包起來,可以被統(tǒng)一調(diào)用。常見的模塊化方法如下:

1.包成object法,即包成js的Object類

2.立即執(zhí)行函數(shù)法,即包成立即執(zhí)行函數(shù)

3.閉包法


二、歷史模塊加載規(guī)范

ES6以前,通用的模塊規(guī)范有兩種,commJS和AMD。在ES6 module被完全實現(xiàn)之前,還需要我們大量使用這兩個規(guī)范。

1.commonJS: ?

? ??暴露模塊:module.exports和exports

? ??引入模塊:使用require()用來引入模塊:

var math=require(‘math’); ? math.add(3,4)

require方法執(zhí)行完后,才能執(zhí)行下面的語句,是同步的,所以時間可能會延遲。

2.AMD(Asynchronous Module Definition異步模塊定義):

? ??暴露模塊:模塊必須用define()定義:define(id, dependencies,factory)。其中id和dependencies可選。

? ??引入模塊:它采用異步加載的方法加載模塊,模塊加載不影響后面語句的執(zhí)行。

AMD也是用require()方法,但是需要兩個參數(shù):require([module], callback)。其中第一個是模塊數(shù)組,第二個參數(shù)是回調(diào)函數(shù)。

require([‘math’],function(math){

math.add(3,4);

})

其中,math函數(shù)和require函數(shù)不是同步的,不會阻塞。

常見的require.js就實現(xiàn)了AMD規(guī)范。

案例解析:require.js

兩個作用:

1.異步加載,不阻塞

2.管理加載模塊之間的依賴

3.CMD(Common Module Definition)

? ??暴露模塊:define()

? ??引入模塊:require

CMD是seajs推崇的規(guī)范,對依賴是就近處理的,用的時候才require().

define(function(require, exports, module) {

var clock = require('clock');

clock.start();

});

CMD與AMD的不同:AMD提前明確需要哪些依賴,提前加載完;CMD用的時候才加載具體的模塊。都是異步加載。


三、最新的標準

ES6的module提出了一個新的標準,

? ??暴露模塊:export ?(不是exports)

? ??引入模塊:import

export語法聲明用于導出函數(shù)、對象、指定文件(或模塊)的原始值.export有命名導出默認導出

// "module1.js" 模塊

export functionfunc1(x) { ? ? //默認導出

return x+1;

}

const c1 = 33+42+randn(); ? //命名導出

export { c1 };

使用:

在另一個模塊中,可以這樣引入module1暴露的模塊

import { func1, c1 }from'module1';

console.log(func1(7));

console.log(c1);?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容