日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Require的用法及短語 require的用法

為什么有模塊概念理想情況下,開發(fā)者只需要實現(xiàn)核心的業(yè)務邏輯,其他都可以加載別人已經(jīng)寫好的模塊 。
但是,Javascript不是一種模塊化編程語言,在es6以前 , 它是不支持”類”(class),所以也就沒有”模塊”(module)了 。
首發(fā)文章,歡迎關注我的公眾號:Web前端Talkrequire時代Javascript社區(qū)做了很多努力 , 在現(xiàn)有的運行環(huán)境中,實現(xiàn)”模塊”的效果 。
原始寫法
模塊就是實現(xiàn)特定功能的一組方法 。
只要把不同的函數(shù)(以及記錄狀態(tài)的變量)簡單地放在一起,就算是一個模塊 。

Require的用法及短語 require的用法



上面的函數(shù)m1()和m2(),組成一個模塊 。使用的時候,直接調(diào)用就行了 。
這種做法的缺點很明顯:”污染”了全局變量,無法保證不與其他模塊發(fā)生變量名沖突,而且模塊成員之間看不出直接關系 。
對象寫法
為了解決上面的缺點,可以把模塊寫成一個對象,所有的模塊成員都放到這個對象里面

Require的用法及短語 require的用法



上面的函數(shù)m1()和m2(),都封裝在module1對象里 。使用的時候,就是調(diào)用這個對象的屬性

Require的用法及短語 require的用法



這樣的寫法會暴露所有模塊成員,內(nèi)部狀態(tài)可以被外部改寫 。比如 , 外部代碼可以直接改變內(nèi)部計數(shù)器的值 。

Require的用法及短語 require的用法



立即執(zhí)行函數(shù)寫法
使用”立即執(zhí)行函數(shù)”(Immediately-Invoked Function Expression,IIFE),可以達到不暴露私有成員的目的

Require的用法及短語 require的用法



使用上面的寫法,外部代碼無法讀取內(nèi)部的_count變量 。

Require的用法及短語 require的用法



module就是Javascript模塊的基本寫法 。
主流模塊規(guī)范在es6以前,還沒有提出一套官方的規(guī)范,從社區(qū)和框架推廣程度而言,目前通行的javascript模塊規(guī)范有兩種:CommonJS 和 AMD
CommonJS規(guī)范

Require的用法及短語 require的用法



2009年 , 美國程序員Ryan Dahl創(chuàng)造了node.js項目,將javascript語言用于服務器端編程 。
這標志”Javascript模塊化編程”正式誕生 。前端的復雜程度有限,沒有模塊也是可以的,但是在服務器端,一定要有模塊 , 與操作系統(tǒng)和其他應用程序互動,否則根本沒法編程 。
node編程中最重要的思想之一就是模塊,而正是這個思想,讓JavaScript的大規(guī)模工程成為可能 。模塊化編程在js界流行,也是基于此 , 隨后在瀏覽器端,requirejs和seajs之類的工具包也出現(xiàn)了,可以說在對應規(guī)范下 , require統(tǒng)治了ES6之前的所有模塊化編程,即使現(xiàn)在,在ES6 module被完全實現(xiàn)之前,還是這樣 。
在CommonJS中,暴露模塊使用module.exports和exports,很多人不明白暴露對象為什么會有兩個,后面會介紹區(qū)別
在CommonJS中,有一個全局性方法require(),用于加載模塊 。假定有一個數(shù)學模塊math.js,就可以像下面這樣加載 。

Require的用法及短語 require的用法



然后,就可以調(diào)用模塊提供的方法:

Require的用法及短語 require的用法



正是由于CommonJS 使用的require方式的推動,才有了后面的AMD、CMD 也采用的require方式來引用模塊的風格

推薦閱讀