javascript
模块化编程AMDCommonJS
為什么要模塊化編程
如果JS也可以像類似python,Java使用import,引入我們想要的模塊,想要什么模塊,就加載什么模塊,可以給前端編程帶來(lái)更多的便捷,結(jié)構(gòu)更加清晰明了。但是,這樣做有一個(gè)前提,那就是大家必須以同樣的方式編寫模塊。
目前,Javascript模塊規(guī)范共有兩種:CommonJS和AMD。
CommonJS
2009年,美國(guó)程序員Ryan Dahl創(chuàng)造了node.js項(xiàng)目,將javascript語(yǔ)言用于服務(wù)器端編程,標(biāo)志"Javascript模塊化編程"正式誕生。在瀏覽器環(huán)境下,沒(méi)有模塊也不是特別大的問(wèn)題,畢竟網(wǎng)頁(yè)程序的復(fù)雜性有限;但是在服務(wù)器端,一定要有模塊,與操作系統(tǒng)和其他應(yīng)用程序互動(dòng),否則根本沒(méi)法編程。node.js的模塊系統(tǒng),就是參照CommonJS規(guī)范實(shí)現(xiàn)的。在CommonJS中,有一個(gè)全局性方法require(),用于加載模塊。
var math = require('math');math.add(2,3); // 5但是,由于一個(gè)重大的局限,使得CommonJS規(guī)范不適用于瀏覽器環(huán)境。在第一行require('math')之后運(yùn)行,因此必須等math.js加載完成。也就是說(shuō),如果加載時(shí)間很長(zhǎng),整個(gè)應(yīng)用就會(huì)停在那里等。這對(duì)服務(wù)器端不是一個(gè)問(wèn)題,因?yàn)樗械哪K都存放在本地硬盤,可以同步加載完成,等待時(shí)間就是硬盤的讀取時(shí)間。但是,對(duì)于瀏覽器,這卻是一個(gè)大問(wèn)題,因?yàn)槟K都放在服務(wù)器端,等待時(shí)間取決于網(wǎng)速的快慢,可能要等很長(zhǎng)時(shí)間,瀏覽器處于"假死"狀態(tài)。
因此,瀏覽器端的模塊,不能采用"同步加載"(synchronous),只能采用"異步加載"(asynchronous)。這就是AMD規(guī)范誕生的背景。
AMD
AMD是"Asynchronous Module Definition"的縮寫,意思就是"異步模塊定義"。它采用異步方式加載模塊,模塊的加載不影響它后面語(yǔ)句的運(yùn)行。所有依賴這個(gè)模塊的語(yǔ)句,都定義在一個(gè)回調(diào)函數(shù)中,等到加載完成之后,這個(gè)回調(diào)函數(shù)才會(huì)運(yùn)行。
AMD也采用require()語(yǔ)句加載模塊,但是不同于CommonJS,它要求兩個(gè)參數(shù):
require([module], callback);第一個(gè)參數(shù)[module],是一個(gè)數(shù)組,里面的成員就是要加載的模塊;第二個(gè)參數(shù)callback,則是加載成功之后的回調(diào)函數(shù)。如果將前面的代碼改寫成AMD形式,就是下面這樣:
require(['math'], function (math) {math.add(2, 3); });我們經(jīng)常聽到的一個(gè)Javascript庫(kù):require.js,它實(shí)現(xiàn)了AMD規(guī)范,我們可以方便的用來(lái)模塊化管理。
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhouwenhong/p/3969587.html
總結(jié)
以上是生活随笔為你收集整理的模块化编程AMDCommonJS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: docker 感性介绍
- 下一篇: JS获取鼠标位置,兼容IE FF