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

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

用幾道面試題來看JavaScript執行機制

瀏覽:165日期:2023-09-30 10:00:43
前面的話

根據JavaScript的運行環境,鎖定它為單線程,任務需要排隊執行,如果網站資源比較大,這樣會導致瀏覽器加載會很慢,但實際上并沒有,大家肯定立刻想到了同步和異步。

所謂的同步和異步也是在排隊,只是排隊的地方不同。

同步和異步

同步任務進入主線程排隊,異步任務進入事件隊列中排隊

同步任務和異步任務進入到不同的隊列中,也就是上面講的在不同地方排隊。

同步任務進入主線程,異步任務進入事件隊列,主線程任務執行完畢,事件隊列中有等待執行的任務進入主線程執行,直到事件隊列中任務全部執行完畢。

開胃菜

console.log(’a’)setTimeout(function(){ console.log(’b’)}, 200)setTimeout(function(){ console.log(’c’)}, 0)console.log(’d’)

a d c b

從上到下,該進入主線程的進入主線程,該進入事件隊列的進入事件隊列。

那么主線程中存在console.log(’a’)和console.log(’d’),定時器setTimeout延遲一段時間執行,顧名思義異步任務進入事件隊列中,等待主線程任務執行完畢,再進入主線程執行。

定時器的延遲時間為0并不是立刻執行,只是代表相比于其他定時器更早的進入主線程中執行。

加一盤

for(var i = 0; i < 10; i++) { setTimeout(function() {console.log(i) }, 1000)}

結果:十個10

每次for循環遇到setTimeout將其放入事件隊列中等待執行,直到全部循環結束,i作為全局變量當循環結束后i = 10,再來執行setTimeout時i的值已經為10, 結果為十個10。

將var改為let,變量作用域不同,let作用在當前循環中,所以進入事件隊列的定時器每次的i不同,最后打印結果會是 0 1 2...9。

宏任務 微任務

除了經常說的同步任務和異步任務之外,更可分為宏任務,微任務

主要宏任務:整段腳本scriptsetTimeoutsetTimeout...

主要微任務:promise.then...

執行流程:

1.整段腳本script作為宏任務開始執行

2.遇到微任務將其推入微任務隊列,宏任務推入宏任務隊列

3.宏任務執行完畢,檢查有沒有可執行的微任務

4.發現有可執行的微任務,將所有微任務執行完畢

5.開始新的宏任務,反復如此直到所有任務執行完畢

來一盤Promise

const p = new Promise(resolve => { console.log(’a’) resolve() console.log(’b’)})p.then(() => { console.log(’c’)})console.log(’d’)

結果:a b d c

1.整段script進入宏任務隊列開始執行

2.promise創建立即執行,打印ab

3.遇到promise.then進入微任務隊列

4.遇到console.log(’d’)打印d

5.整段代碼作為宏任務執行完畢,有可執行的微任務,開始執行微任務,打印c。

setTimeout(function(){ console.log(’setTimeout’)}, 0)const p = new Promise(resolve => { console.log(’a’) resolve() console.log(’b’)})p.then(() => { console.log(’c’)})console.log(’d’)

結果:a b d c setTimeout

1.setTimeout進入宏任務隊列

2.promise創建立即執行,打印ab

3.遇到promise.then進入微任務隊列

4.遇到console.log(’d’)打印d

5.有可執行的微任務,打印c

6.微任務執行完畢,開始執行新的宏任務,setTimeout開始執行,打印setTimeout

setTimeout(function(){ console.log(’setTimeout’)}, 0)const p = new Promise(resolve => { console.log(’a’) resolve() console.log(’b’)})p.then(() => { console.log(’c’) setTimeout(function(){console.log(’then中的setTimeout’) }, 0)})console.log(’d’)

結果:a b d c setTimeout then中的setTimeout

1.同上

2.執行微任務打印c,遇到setTimeout將其推入宏任務隊列中

3.定時器延遲時間相同,開始按照順序執行宏任務,分別打印setTimeoutthen中的setTimeout

再加點定時器

console.log(’a’);new Promise(resolve => { console.log(’b’) resolve()}).then(() => { console.log(’c’) setTimeout(() => { console.log(’d’) }, 0)})setTimeout(() => { console.log(’e’) new Promise(resolve => {console.log(’f’)resolve() }).then(() => {console.log(’g’) })}, 100)setTimeout(() => { console.log(’h’) new Promise(resolve => {resolve() }).then(() => {console.log(’i’) }) console.log(’j’)}, 0)

結果:a b c h j i d e f g

1.打印a

2.promise立即執行,打印b

3.promise.then推入微任務隊列

4.setTimeout推入宏任務隊列

5.整段代碼執行完畢,開始執行微任務,打印c,遇到setTimeout推入宏任務隊列排隊等待執行

6.沒有可執行的微任務開始執行宏任務,定時器按照延遲時間排隊執行

7.打印h j,promise.then推入微任務隊列有

8.可執行的微任務,打印i,繼續執行宏任務,打印d

9.執行延遲為100的宏任務,打印e f,執行微任務打印g,所有任務執行完畢

簡單測試

console.log(’start’)a().then(() => { console.log(’a_then’)})console.log(’end’)function a() { console.log(’a_function’) return b().then((res) => { console.log(’res’, res) console.log(’b_then’) return Promise.resolve(’a方法的返回值’) })}function b() { console.log(’b_function’) return Promise.resolve(’返回值’)}

結果:start a_function b_function end res 返回值 b_then a_then

根據上面例子的流程講解來思考這個,加深理解

總結 JavaScript單線程,任務需要排隊執行 同步任務進入主線程排隊,異步任務進入事件隊列排隊等待被推入主線程執 行定時器的延遲時間為0并不是立刻執行,只是代表相比于其他定時器更早的被執行 以宏任務和微任務進一步理解js執行機制 整段代碼作為宏任務開始執行,執行過程中宏任務和微任務進入相應的隊列中 整段代碼執行結束,看微任務隊列中是否有任務等待執行,如果有則執行所有的微任務,直到微任務隊列中的任務執行完畢,如果沒有則繼續 執行新的宏任務執行新的宏任務,凡是在執行宏任務過程中遇到微任務都將其推入微任務隊列中執行 反復如此直到所有任務全部執行完畢

以上就是用幾道面試題來看JavaScript執行機制的詳細內容,更多關于JavaScript執行機制的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
四虎4545www国产精品| 日本免费久久| 欧美天堂亚洲电影院在线观看| 成人精品久久| 国产精品麻豆久久| 久久久777| 红桃视频国产一区| 午夜久久av| 日韩二区在线观看| 国产精品地址| 三级在线看中文字幕完整版| 麻豆精品蜜桃| 久久理论电影| 欧美va天堂在线| 日本大胆欧美人术艺术动态| 日日夜夜免费精品视频| 7777精品| 亚洲综合在线电影| 美女久久网站| 亚欧洲精品视频在线观看| 国产精品视频首页| 成人精品国产亚洲| 欧美精品九九| 国产亚洲电影| 日本欧美不卡| 日韩毛片一区| 欧洲av一区二区| 不卡在线一区二区| 日韩精品三区四区| 久久精品欧洲| 欧美日韩国产一区二区三区不卡 | 蜜臀91精品国产高清在线观看| 青青草精品视频| 偷拍欧美精品| 久久69成人| 视频一区二区三区中文字幕| 国产毛片精品| 视频一区视频二区在线观看| 国产精品不卡| 91精品啪在线观看国产爱臀| 色一区二区三区四区| 日本午夜精品一区二区三区电影| 黄色在线观看www| 视频一区中文字幕国产| 日韩国产激情| 久久97视频| 国产欧美一区二区色老头| 亚洲制服少妇| 欧美日韩国产免费观看| 中文av在线全新| 欧美xxxx性| 日韩精品福利一区二区三区| 99久久视频| 国产一区二区三区黄网站| 日韩欧美久久| 国产精品腿扒开做爽爽爽挤奶网站| 国产美女高潮在线| 四季av一区二区凹凸精品| 热久久久久久| 亚洲精品美女91| 日韩高清在线不卡| 婷婷精品在线观看| 日韩av不卡在线观看| 日韩中文字幕1| 男女男精品网站| 无码日韩精品一区二区免费| 日韩在线麻豆| 国产欧美自拍一区| 美女视频黄 久久| 高清精品久久| 国产精品一级在线观看| 国产精品永久| 国产精品日本一区二区不卡视频| 欧美精品不卡| 卡一卡二国产精品| 日韩在线观看一区| 欧美成人久久| 在线观看视频免费一区二区三区| 免费久久99精品国产| 日韩精品免费视频人成| 国产精品亚洲欧美一级在线| 久久久91麻豆精品国产一区| av最新在线| 一区久久精品| 日韩精品免费视频人成 | 日韩在线观看一区二区三区| 国产毛片一区二区三区| 久久国产毛片| 日本中文字幕视频一区| 亚洲www啪成人一区二区| 亚洲免费专区| 日韩一区二区在线免费| 亚洲精一区二区三区| 日韩一区电影| 国产剧情在线观看一区| 久久蜜桃资源一区二区老牛| 日韩精品一区二区三区中文字幕| 亚洲人成在线网站| 蜜桃一区二区三区在线观看| 国模大尺度视频一区二区| 蘑菇福利视频一区播放| 国产一区调教| 日韩精品久久理论片| 久久美女精品| 黄色aa久久| 国产乱码精品一区二区三区四区 | 国内亚洲精品| 精品午夜av| 欧美私人啪啪vps| 久久国产精品亚洲77777| 久久影院资源站| 日韩综合一区二区| 亚洲免费成人| 99久久激情| www.51av欧美视频| 成人台湾亚洲精品一区二区| 日韩动漫一区| 青青国产91久久久久久| 视频一区二区三区入口| 欧美成人日韩| 1024精品一区二区三区| 性欧美videohd高精| 亚洲天堂资源| 电影亚洲精品噜噜在线观看| 黄色在线观看www| 国产一区二区精品久| 久久wwww| 精品美女视频| 亚洲播播91| 91精品国产成人观看| 欧美粗暴jizz性欧美20| 国产一区清纯| aa国产精品| 美国av一区二区| 只有精品亚洲| 欧美精品影院| 精品一区不卡| 久久国产影院| 日韩影院精彩在线| 国产精品亚洲欧美一级在线| 久久不见久久见中文字幕免费| 国产精品久一| 欧美不卡高清一区二区三区| 精品日韩毛片| 国产精品中文字幕制服诱惑| 麻豆国产在线| 国产亚洲综合精品| 国产欧美自拍一区| 99国产精品免费视频观看| 亚洲一区亚洲| 精品一区二区三区中文字幕在线| 成人在线网站| 欧美亚洲免费| 欧美/亚洲一区| 国产精品美女午夜爽爽| 激情综合在线| 午夜亚洲福利| 日韩免费久久| 亚洲毛片在线| 日韩精品免费一区二区在线观看| 六月婷婷一区| 欧美成人精品三级网站| 欧美日韩一区二区三区在线电影| 久久国产小视频| 麻豆极品一区二区三区| 在线亚洲免费| 日韩av免费| 麻豆国产一区| 青青草精品视频| 伊人影院久久| 久久精品91| 日韩av一区二区在线影视| 亚洲欧美综合| 99久久亚洲精品蜜臀| 精品午夜av| 久久国产精品免费一区二区三区| 在线综合欧美| 最新亚洲一区| 亚洲视频www| 99久精品视频在线观看视频| 国产在线日韩精品| 麻豆视频久久| 欧美激情综合| 嫩草伊人久久精品少妇av杨幂 | 国产精品久久久久久久久久白浆| 亚洲伊人影院| 亚洲日韩视频| 视频在线观看一区| 亚洲综合国产| 国产国产精品| 日韩视频在线一区二区三区| 亚洲国产专区校园欧美| 国产亚洲一区二区手机在线观看| 精品亚洲二区| 麻豆视频在线观看免费网站黄| 精品国产乱码久久久| 精品国产亚洲日本| 精品午夜视频| 色欧美自拍视频| 国产成人调教视频在线观看|