欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

從零學(xué)習(xí)node.js之模塊規(guī)范(一)

什么是Node.js?

延吉網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

很多初學(xué)者并沒(méi)有真正地理解Node.js到底是什么。nodejs.org網(wǎng)站中的描述也沒(méi)有多大幫助。

首先要清楚Node不是一個(gè)Web服務(wù)器,這十分重要。它本身并不能做任何事情。它無(wú)法像Apache那樣工作。如果你希望它成為一個(gè)HTTP服務(wù)器,你必須借助它內(nèi)置庫(kù)自己編寫。Node.js只是計(jì)算機(jī)上執(zhí)行代碼的另一種方式,它是一個(gè)簡(jiǎn)單的JavaScript Runtime.

模塊化

在講解CommonJS, AMD, CMD這些概念之前,我們首先倆了解下js的模塊化。模塊化,顧名思義,就是將項(xiàng)目按照功能或者其他邏輯進(jìn)行分解處理,每個(gè)部分只處理一個(gè)功能,進(jìn)行功能的解耦處理,方便以后的開(kāi)發(fā)和維護(hù)。那么模塊化必須具有以下的能力,才能進(jìn)行模塊的拆分和組裝:

  1. 定義封裝的模塊;
  2. 定義新模塊對(duì)其他模塊的依賴;
  3. 可對(duì)其他模塊的引入支持;

那么就需要一套規(guī)范準(zhǔn)則來(lái)定義這些能力,于是就出現(xiàn)了CommonJS, AMD, CMD等。

1. CommonJS

CommonJS原先叫做ServerJS,是js在服務(wù)端的規(guī)范,node使用的就是這種規(guī)范。根據(jù)CommonJS規(guī)范,一個(gè)單獨(dú)的文件就是一個(gè)模塊,require用來(lái)加載一個(gè)模塊,exports用來(lái)向外部暴露該模塊里的方法或?qū)傩浴?/p>

例如:

// hello.js
function say(username){
 console.log( 'hello, '+username );
}

exports.say = say; 

=============

// main.js
var person = require('./hello');

person.say('wenzi'); // hello, wenzi
person.say('師少兵'); // hello, 師少兵
person.say('NUC'); // hello, NUC 

同時(shí),require語(yǔ)句可以寫在文件中的任何位置,只要使用之前引用之前即可,不一定要寫在文件的最前面。不過(guò),為了代碼更易閱讀,能直觀地看到當(dāng)前引用了哪些模塊,最好是放在文件的最前面。

EXPORTS與MODULE.EXPORTS的區(qū)別

可能有人見(jiàn)過(guò)直接使用exports的,有的是使用module.exports的,這里稍微的講解下這兩者的區(qū)別。

先舉個(gè)簡(jiǎn)單的例子:

var a = {name:'wenzi'};
var b = a;

console.log(a); // {name: "wenzi"}
console.log(b); // {name: "wenzi"} 

a和b輸出的結(jié)果是一樣的?,F(xiàn)在我改變下b中name的值:

b.name = 'shaobing';

console.log(a); // {name: "shaobing"}
console.log(b); // {name: "shaobing"} 

a和b的輸出結(jié)果都發(fā)生了改變。我再對(duì)b進(jìn)行重新聲明:

var b = {name:'師少兵'};

console.log(a); // {name: "shaobing"}
console.log(b); // {name: "師少兵"} 

這三個(gè)例子輸出了三種結(jié)果:

  1. 聲明a對(duì)象,并把a(bǔ)賦值給b,然后a和b輸出了相同的結(jié)果;
  2. 改變了b中的name,那么a中的name也跟著改變;
  3. 重新聲明了b對(duì)象,那么a中的name則沒(méi)有跟著b一起改變

解釋:a 是一個(gè)對(duì)象,b 是對(duì) a 的引用,即 a 和 b 指向同一塊內(nèi)存,所以1中的輸出是一樣的。當(dāng)對(duì) b 作修改時(shí),即 a 和 b 指向同一塊內(nèi)存地址的內(nèi)容發(fā)生了改變,a 也會(huì)體現(xiàn)出來(lái),所以第2個(gè)例子輸出也一樣。當(dāng) b 被覆蓋時(shí),b 指向了一塊新的內(nèi)存,a 還是指向原來(lái)的內(nèi)存,所以最后輸出會(huì)不一樣。

那么此時(shí)就可以引出exportsmodule.exports了:

  1. module.exports 初始值為一個(gè)空對(duì)象 {}
  2. exports 是指向的 module.exports 的引用
  3. require() 返回的是 module.exports 而不是 exports

如果module.exports發(fā)生了新指向,則exports無(wú)效;若module.exports沒(méi)有發(fā)生變化,則直接exports即可。

2. AMD與RequireJS

說(shuō)到AMD,不得不說(shuō)到RequireJS,AMD從CommonJS社區(qū)獨(dú)立出來(lái),單獨(dú)成為了AMD社區(qū),AMD的流行,很大程度上也是依托了RequireJS作者的推廣。

AMD規(guī)范中,默認(rèn)推薦的模塊格式是:

// hello.js
// 將需要引入的模塊全部寫入到數(shù)組中,然后傳遞參數(shù)進(jìn)行調(diào)用
define(['a', 'b'], function(a, ,b){
 // do something

 return{
 hello : function(username){
  console.log( 'hello, '+username );
 }
 }
})

==========

// main.js
define(['./hello'], function(h){
 h.hello('wenzi');
})

也就是說(shuō),在AMD中,模塊必須使用define定義,依賴通過(guò)函數(shù)參數(shù)傳進(jìn)來(lái),這樣的一個(gè)好處就是所有的依賴都能一目了然。

3. CMD與seajs

CMD規(guī)范是國(guó)內(nèi)著名的玉伯大神提出來(lái)的,將就的就是就近依賴,什么時(shí)候用到,就在那個(gè)地方進(jìn)行require。SeaJS就是使用的CMD規(guī)范:

// hello.js
define(function(require, exports, module){
 var a = require('a');
 // do a

 var b = require( 'b' );
 // do b

 module.exports.hello = hello; // 對(duì)外輸出hello
})

從這里也能看到AMD和CMD的區(qū)別:

  1. AMD通常需要一次性引入全部的依賴,然后通過(guò)參數(shù)傳遞;而CMD則需要時(shí)才引入

不過(guò),AMD也支持CMD這樣的引入格式,但內(nèi)部還是按照AMD的邏輯進(jìn)行執(zhí)行。

4. 總結(jié)

這篇文章里介紹了下CommonJS, AMD, CMD規(guī)范的相關(guān)區(qū)別與聯(lián)系,這里再簡(jiǎn)要的總結(jié)下:

  1. CommonJS: 每個(gè)文件就是一個(gè)模塊,不用define進(jìn)行定義,node使用此規(guī)范;
  2. AMD: 使用define定義一個(gè)模塊,講究提前依賴;
  3. CMD: 使用define定義模塊,將就就近依賴

好了,以上就是這篇文章的全部?jī)?nèi)容了,接下來(lái),我們就要開(kāi)始正式進(jìn)行node的學(xué)習(xí)了。感興趣的朋友們請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)哦。

當(dāng)前標(biāo)題:從零學(xué)習(xí)node.js之模塊規(guī)范(一)
當(dāng)前地址:http://chinadenli.net/article8/iegeip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、小程序開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)公司、外貿(mào)建站、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
亚洲国产一区精品一区二区三区色| 日韩欧美三级中文字幕| 日韩中文字幕狠狠人妻| 亚洲国产日韩欧美三级| 亚洲国产av在线视频| 国产精品欧美一级免费| 91欧美一区二区三区成人| 亚洲夫妻性生活免费视频| 东京热加勒比一区二区三区| 中文字幕日韩精品人一妻| 国产一级不卡视频在线观看| 欧美二区视频在线观看| 中文字幕五月婷婷免费| 欧美午夜一级特黄大片| 91麻豆精品欧美视频| 亚洲av日韩av高潮无打码| 日本高清一区免费不卡| 欧美不卡一区二区在线视频| 久久精品国产一区久久久| 日韩欧美二区中文字幕| 亚洲国产香蕉视频在线观看| 国产三级视频不卡在线观看| 国产精品午夜小视频观看| 亚洲男人天堂网在线视频| 国产欧美日本在线播放| 久久亚洲成熟女人毛片| 伊人久久青草地综合婷婷| 亚洲一区二区精品免费视频| 亚洲天堂国产精品久久精品| 欧美激情中文字幕综合八区| 免费午夜福利不卡片在线 视频 | 黄色国产一区二区三区| 少妇毛片一区二区三区| 98精品永久免费视频| 91精品蜜臀一区二区三区| 日本不卡在线视频中文国产| 日韩国产中文在线视频| 少妇人妻精品一区二区三区 | 欧美国产日本免费不卡| 久久精品亚洲精品国产欧美| 很黄很污在线免费观看|