日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript運行機制實例分析

瀏覽:33日期:2023-11-04 14:10:41

本文實例講述了JavaScript運行機制。分享給大家供大家參考,具體如下:

第一次寫博客

目前研一第二學期,大二開始入門前端,然而長久以來都是對于框架的簡單調用,并未對其進行深入研究,因此,這個博客是作為自我督促的開始。這篇博客的內容源于前段時間寫一個微信小程序前端,發現頁面的渲染順序總與自己的預想相違背,因此近期看了一些關于JavaScript運行機制的博客及文檔,有了一些基本的框架,接下來就來詳細看一下我所了解到的內容。

JavaScript執行順序

首先,JavaScript是按照順序,一行一行執行的,且JS只有一條線程,即不可能進行兩條代碼同時執行,也就是說,在一條代碼執行時,它后面的所有代碼都需要等待,直到該代碼執行結束,后面的才能繼續執行。如果是這樣,就會導致用戶體驗度極其不好,例如一個請求發送給服務器,后續代碼就會一直等待,直到服務器返回結果,用戶才能進行新的操作。

這又是怎么回事呢?

詳細解釋JavaScript執行機制JavaScript執行棧

JavaScript是以壓棧的方式進行代碼的執行的,一開始執行時棧內為空,當執行開始,JS引擎會將代碼放入棧底,若該代碼包含其他函數的調用,則將被調用的函數放在棧頂,若該代碼未包含其他函數的調用,則執行該函數,執行完成后出棧,以此類推,最終直到棧為空。

JavaScript的同步任務和異步任務

事實上,真正的JS內部分為同步任務和異步任務,然而這并沒有改變JS單線程的特征。

同步任務:執行后直接返回結果,例:console.log();c = a + b 異步任務:執行后無法立刻返回結果,需要等待一定時間,才能執行回調函數,對返回結果進行操作

系統來說,JS存在一個主線程,它會首先執行所有同步任務,而異步任務都會先進行注冊,然后主線程不會等待異步任務執行結果的返回,而是繼續執行下面的同步任務(在此過程中,如果異步任務返回結果,接下來的回調函數會放在Event Queue中等待),直到同步任務全部執行完畢,主線程就會從Event Queue讀取任務進行執行。該過程會不斷循環,即事件循環Event Loop。

事件循環是如何發生的

不覺得奇怪嗎,如果按照上述同步任務和異步任務的執行方式,那不是一輪就可以執行完畢嗎,又何來的Event Loop?

這是個小細節,異步任務存在多個時,每一個異步任務返回的結果所需的時間都是不同的,這就存在Event Queue以先進先出的形式將返回結果進行排隊,第一個異步任務返回結果,那么就將其放在隊列的首位,接下來的異步任務緊隨其后,就這樣排成一隊。當主線程空閑時(即同步任務執行完畢后),便從Event Queue中讀取事件,放入主線程執行。而循環來自于,當Event Queue執行完畢后,過了一段時間,又有之前的異步任務返回結果,放到Event Queue中,監控器檢測到Event Queue為非空,主線程又開始執行Event Queue中的任務。

宏任務和微任務

在解釋定義之前,我們先對異步任務進行說明:

對服務器的異步請求:最常見的異步任務,這涉及前后端的交互,需要服務器對請求進行處理,并返回請求結果 setTimeout和setInterval:延時操作,后者為循環操作(都涉及延時值) Promise:JS用來處理異步操作的對象 process.nextTick(callback):類似node.js版的'setTimeout',在事件循環的下一次循環中調用 callback 回調函數。

廣義上JS分為同步任務和異步任務,在此對任務進行更精細的定義:

macro-task(宏任務):包括整體代碼script,setTimeout,setInterval micro-task(微任務):Promise,process.nextTick

在此,之所以提出宏任務和微任務,是為了更好的理解事件循環!

執行過程:

主線程會按順序先執行第一次循環的宏任務,然后將第一次循環遇到的微任務放入微任務的Event Queue中,將遇到的宏任務放入宏任務Event Queue中,在此特別注意!!第一次循環的宏任務是整體script代碼?。。? 然后后執行微任務的Event Queue; 第二次循環時,會從宏任務的Event Queue中取出第一個宏任務,然后執行當前宏任務中包含的代碼,同樣將遇到的微任務放入微任務的Event Queue中,將遇到的宏任務放入宏任務Event Queue中; 再執行當前微任務的Event Queue中的任務; 第三次循環,從宏任務的Event Queue中取出第二個宏任務…(以此循環)

簡而言之,就是先執行宏任務,再執行微任務,特別注意兩點即可:

第一次循環的宏任務是整體script代碼 宏任務隊列是一次循環執行一條宏任務

這里看個例子:

console.log(’1’); setTimeout(function() { console.log(’2’); process.nextTick(function() { console.log(’3’); }) new Promise(function(resolve) { console.log(’4’); resolve(); }).then(function() { console.log(’5’) }) }) process.nextTick(function() { console.log(’6’); }) new Promise(function(resolve) { console.log(’7’); resolve(); }).then(function() { console.log(’8’) }) setTimeout(function() { console.log(’9’); process.nextTick(function() { console.log(’10’); }) new Promise(function(resolve) { console.log(’11’); resolve(); }).then(function() { console.log(’12’) }) }) //作者:ssssyoki //鏈接:https://juejin.im/post/59e85eebf265da430d571f89 //來源:掘金

輸出順序為:

1,7,6,8,2,4,3,5,9,11,10,12

總結

在此博客中,或許包含一些你未曾聽過的名詞或方法,我并未對其進行詳細解釋。之所以如此,是由于,于我個人,在看一些資料時,經常遇到不懂的東西,我會選擇自己進行查閱和理解,這樣更有效于記憶和通透的理解,就跟查單詞是一樣的,如果文本里直接告訴你,反而不會重視。

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript操作DOM技巧總結》、《JavaScript頁面元素操作技巧總結》、《JavaScript事件相關操作與技巧大全》、《JavaScript查找算法技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript錯誤與調試技巧總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久97久久97精品免视看秋霞| 麻豆国产精品一区二区三区| 亚洲人成在线网站| 麻豆mv在线观看| 国产传媒在线观看| 91日韩在线| 鲁大师精品99久久久| 国产一区二区三区四区大秀 | 欧美日韩视频免费看| 欧美在线不卡| 国产精品久久| 日韩成人精品一区| 中文字幕系列一区| 激情丁香综合| 免费在线观看不卡| 久久国产人妖系列| sm久久捆绑调教精品一区| 欧美日韩水蜜桃| 日韩在线一二三区| 亚洲人成毛片在线播放女女| 国产日韩三级| 国产精品二区不卡| 欧美网站在线| 日韩一区二区三区精品视频第3页| 日韩av一区二区三区| 麻豆久久久久久| 欧美日韩在线播放视频| 少妇精品在线| 精品视频99| 国产一区二区中文| 欧美日韩亚洲三区| 国产精品yjizz视频网| 亚洲一区免费| 国产伦精品一区二区三区视频 | 国产精品亚洲综合久久| 色婷婷综合网| 久久福利一区| 开心激情综合| 黄色av日韩| 国产精品日本一区二区三区在线| 日韩精品欧美激情一区二区| 日韩精品一级二级| 精品国产亚洲一区二区在线观看| 午夜视频精品| 国产精品日本一区二区不卡视频 | 欧美不卡高清一区二区三区| 色狠狠一区二区三区| 91亚洲国产成人久久精品| 亚洲作爱视频| 精品日韩在线| 免费在线观看一区二区三区| 97国产精品| 亚洲另类av| 少妇久久久久| 国产另类在线| 99国产精品自拍| 精品国产亚洲日本| 亚洲开心激情| 久久久久久久久久久妇女| 国产日产精品_国产精品毛片| 亚洲不卡av不卡一区二区| 欧美日韩18| 在线亚洲精品| 97精品国产| 国产亚洲精aa在线看| 好吊视频一区二区三区四区| 国产一区二区三区亚洲| 久久亚洲欧美| 亚洲爱爱视频| 麻豆高清免费国产一区| 免费看黄色91| 99精品电影| 国产一区一一区高清不卡| 天堂精品久久久久| 国精品一区二区三区| 精品国产99| 欧美亚洲一区二区三区| 夜久久久久久| 久久久久国产一区二区| 美女久久久久久| 日韩不卡手机在线v区| 在线亚洲成人| 久久狠狠婷婷| 国产精品99视频| 国产精品一区三区在线观看| 中文字幕日韩亚洲| 1024精品久久久久久久久| 人人草在线视频| 麻豆久久一区| 国产精品扒开腿做爽爽爽软件| 少妇精品久久久一区二区三区| 亚洲一区二区成人| 香蕉国产精品| 欧美~级网站不卡| 久久美女性网| 不卡福利视频| 亚洲最新无码中文字幕久久| 国产精品久久久久久久久久白浆 | 日韩精品午夜视频| 99香蕉国产精品偷在线观看| 欧美综合另类| 亚洲v在线看| 久久激情一区| 日韩国产综合| 黄色aa久久| 里番精品3d一二三区| 国产精品一级| 国产精品白丝久久av网站| 国产色99精品9i| 日本午夜免费一区二区| 亚洲精品免费观看| 日韩精品中文字幕一区二区| 亚洲综合五月| 亚洲精品三级| 91精品尤物| 日韩激情av在线| 午夜天堂精品久久久久| 日本一区福利在线| 日本不卡视频在线观看| 欧美一区久久| 日韩欧美四区| 国产精品亚洲欧美日韩一区在线 | 国产精品激情| 欧美1区二区| 色欧美自拍视频| 成人免费电影网址| 国产综合精品| 在线亚洲成人| 日韩视频一二区| 国产精品一区二区三区av| 国产精品1区| 精品视频在线你懂得| 日韩精品专区| 久久精品影视| 午夜精品亚洲| 综合亚洲自拍| 国产精品一区二区中文字幕| 久久精品国产福利| 久久夜夜操妹子| 午夜久久黄色| 日韩欧美激情| 另类欧美日韩国产在线| 久久免费黄色| 一区二区三区国产盗摄| 国产伦精品一区二区三区视频| 久久三级中文| 久久婷婷亚洲| 一二三区精品| 久久中文欧美| 一本大道色婷婷在线| 亚洲欧美久久久| 欧美亚洲免费| 日韩在线第七页| 鲁大师影院一区二区三区| 欧美亚洲二区| 四虎4545www国产精品| 蜜桃久久久久久久| 国产精品igao视频网网址不卡日韩| 国产一区二区三区四区二区| 欧美午夜精彩| 日韩毛片一区| 中文字幕在线看片| 亚洲欧美激情诱惑| 国产精品亚洲四区在线观看| 福利一区和二区| 日韩一级不卡| 欧美国产日韩电影| 久久精品国产大片免费观看| 久久av一区| 久久一区国产| 老鸭窝亚洲一区二区三区| 麻豆精品新av中文字幕| 亚洲无线一线二线三线区别av| 午夜久久av| 久久久一二三| 国产亚洲精aa在线看| 欧美日韩国产一区二区三区不卡| 日韩精品欧美大片| 中文一区一区三区高中清不卡免费| 自由日本语亚洲人高潮| 国产亚洲欧美日韩精品一区二区三区| 日韩在线短视频| 日韩高清不卡一区| 亚洲精品一区三区三区在线观看| 日韩精品欧美成人高清一区二区| 蜜桃av在线播放| 国产一卡不卡| 国产亚洲毛片在线| 国产精品高潮呻吟久久久久| 五月天综合网站| 国产一区二区三区久久| 蜜臀av一区二区在线免费观看| 精品国产麻豆| 日本久久二区| 久久久久亚洲| 九九九精品视频| 日本在线一区二区三区| 欧美日一区二区| 精品日本视频| 日韩精品五月天|