成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

今天就跟大家聊聊有關(guān)JavaScript中怎么實(shí)現(xiàn)事件循環(huán),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名注冊(cè)、網(wǎng)絡(luò)空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、鄂托克前網(wǎng)站維護(hù)、網(wǎng)站推廣。

1.Main.js 執(zhí)行

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

2.調(diào)用secondFunction

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

3.調(diào)用secondFunction引起調(diào)用firstFunction

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

4.執(zhí)行firstFunction,輸出“I'm  first!”,接著由于firstFunction執(zhí)行完畢,firstFunction會(huì)從調(diào)用棧中彈出。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

5.secondFunction繼續(xù)執(zhí)行,輸出“I'm  second!”。接著由于secondFunction執(zhí)行完畢,secondFunction從調(diào)用棧中彈出。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

6.***,main.js執(zhí)行完畢,也從棧中彈出。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

Event Loop:事件循環(huán)

了解了call stack在JavaScript引擎中是如何工作了之后,來看下如何使用異步回調(diào)函數(shù)來避免blocking  代碼。(譯者注:回調(diào)函數(shù)有多種實(shí)現(xiàn)方式,最常見的有:在函數(shù)中使用函數(shù)作用參數(shù)etc。)setTimeout就是使用的回調(diào)函數(shù)??磦€(gè)栗子:

/* Within main.js */  var firstFunction = function () {    console.log("I'm first!"); };  var secondFunction = function () {    setTimeout(firstFunction, 5000);  console.log("I'm second!"); };  secondFunction();  /* Results:  * => I'm second!  * (And 5 seconds later)  * => I'm first!  */

下邊模擬調(diào)用棧(在上個(gè)栗子的基礎(chǔ)上我們這次推前點(diǎn))

1....

2.secondFunction調(diào)用setTimeout,setTimeout入棧:

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

3.setTimeout執(zhí)行后,瀏覽器會(huì)把setTimeout的回調(diào)函數(shù)(在這個(gè)栗子中是firstFunction)放到Event Table中。Event  Table 就是個(gè)注冊(cè)站:調(diào)用棧讓Event Table注冊(cè)一個(gè)函數(shù),該函數(shù)會(huì)在5秒之后被調(diào)用。當(dāng)指定的事情發(fā)生時(shí),Event  Table會(huì)將這個(gè)函數(shù)移到Event Queue。Event Queue其實(shí)就是個(gè)緩沖區(qū)域,這里的函數(shù)等著被調(diào)用并移到調(diào)用棧。

問題來了,什么時(shí)候函數(shù)會(huì)從Event Queue移到調(diào)用棧咧?JavaScript引擎依據(jù)一條規(guī)則:有一個(gè)monitoring  process(不知翻譯成啥好)會(huì)持續(xù)不斷地檢查調(diào)用棧是否為空,一旦為空,它會(huì)檢查Event  Queue里邊是否有等待被調(diào)用的函數(shù)。如果存在,它就會(huì)調(diào)用這個(gè)Queue中***個(gè)函數(shù)并將其移到調(diào)用棧中。如果Event  Queue為空,那么這個(gè)monitoring process會(huì)繼續(xù)不定期的檢查。這一整個(gè)過程就是Event Loop。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

4.一旦回調(diào)函數(shù)加入到Event表中,代碼不會(huì)被block住,瀏覽器不會(huì)等待5秒之后再繼續(xù)處理接下去的代碼,相反,瀏覽器繼續(xù)執(zhí)行secondFunction的下一行代碼,console.log。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

5.在background,Event Table會(huì)持續(xù)地監(jiān)測(cè)是否有事件觸發(fā),將函數(shù)移到Event  Queue中。在這個(gè)栗子中,secondFunction執(zhí)行完畢,接著main.js也執(zhí)行完畢。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

6.從回調(diào)函數(shù)被放入Event Table后5秒鐘,Event Table把firstFucntion移到Event Queue中。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

7.由于事件循環(huán)持續(xù)地監(jiān)測(cè)調(diào)用棧是否已空,此時(shí)它一注意到調(diào)用??樟?,就調(diào)用firstFunction并創(chuàng)建一個(gè)新的調(diào)用棧。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

8.一旦firstFunction執(zhí)行完畢,調(diào)用棧空了,Event Table里也沒有注冊(cè)函數(shù),Event Queue也為空。

JavaScript中怎么實(shí)現(xiàn)事件循環(huán)

看完上述內(nèi)容,你們對(duì)JavaScript中怎么實(shí)現(xiàn)事件循環(huán)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

分享標(biāo)題:JavaScript中怎么實(shí)現(xiàn)事件循環(huán)
網(wǎng)站地址:http://jinyejixie.com/article12/jjjpdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、標(biāo)簽優(yōu)化、微信小程序、營(yíng)銷型網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
浙江省| 江孜县| 咸丰县| 资阳市| 铜陵市| 上林县| 田阳县| 平远县| 高雄县| 定结县| 钦州市| 汉寿县| 颍上县| 武乡县| 天镇县| 台中市| 富民县| 瑞昌市| 穆棱市| 兰考县| 和硕县| 建宁县| 年辖:市辖区| 互助| 鸡西市| 绥化市| 博爱县| 南岸区| 梧州市| 吐鲁番市| 沧州市| 满洲里市| 鄱阳县| 永城市| 宝应县| 津南区| 新乐市| 吉木萨尔县| 乌海市| 德格县| 光泽县|