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

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

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

瀏覽:162日期: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久久,三上悠亚国产精品一区二区三区
欧美成人国产| 老司机精品久久| 国产精品资源| 麻豆精品在线观看| 亚洲国产欧美日本视频| 99精品在线| 一区三区视频| 日本a级不卡| 国产精品777777在线播放| 精品美女久久| 欧美福利一区| 女人av一区| 亚洲tv在线| 成人午夜在线| 亚洲一区区二区| 国产欧美日韩在线一区二区| 国产一区二区色噜噜| 久久久久一区| 亚洲综合专区| 精品中文字幕一区二区三区四区| 激情亚洲影院在线观看| 蜜臀av一区二区在线免费观看| 久久激情av| 久久男人天堂| 中文一区一区三区免费在线观 | 免费视频一区三区| 六月婷婷一区| 国产劲爆久久| 在线日韩视频| 欧美日韩亚洲三区| 亚洲福利专区| 国产精品视频一区二区三区| 亚洲va在线| 欧美啪啪一区| 亚洲免费激情| 麻豆成人av在线| 亚洲精品国产偷自在线观看| 久久狠狠久久| 极品裸体白嫩激情啪啪国产精品| 青草综合视频| 精品91久久久久| 国产精品成人一区二区网站软件| 999国产精品视频| 国产精品国码视频| 一区二区精彩视频| 亚洲第一精品影视| 久久97久久97精品免视看秋霞| 影音先锋久久| 精品网站999| 一本一道久久a久久| 少妇久久久久| 麻豆精品av| 中文字幕一区二区三区在线视频| 国产一二在线播放| 久久精品99国产精品| 91久久久久| 国产一区二区三区黄网站| 蜜臀91精品一区二区三区| 日韩免费高清| 国产精品亚洲综合色区韩国| 蜜乳av另类精品一区二区| 91精品精品| 高清av一区| 国产日韩一区二区三免费高清| 爽好久久久欧美精品| 亚洲天堂黄色| 亚洲成av在线| 福利一区和二区| 国产精品s色| 日韩国产在线不卡视频| 免费日韩一区二区| 1024精品一区二区三区| 捆绑调教日本一区二区三区| 国产日韩三级| 日韩精品中文字幕吗一区二区 | 亚洲综合电影| 精品高清久久| 久久99蜜桃| 国产精品黄色| 国产欧美69| 欧美视频精品全部免费观看| 亚洲深夜福利在线观看| 国产亚洲激情| 欧美专区18| 亚洲男女自偷自拍| 99视频+国产日韩欧美| 激情久久久久久久| 欧美一区二区三区激情视频| 色爱综合av| 亚洲精品极品少妇16p| 亚洲精品一区二区妖精| 亚洲欧美日韩精品一区二区| 首页国产欧美日韩丝袜| 蜜桃免费网站一区二区三区| 亚洲专区视频| 日韩一区二区三免费高清在线观看| 蜜桃一区二区三区在线观看| 亚洲欧美专区| 日韩中文av| 69堂精品视频在线播放| 国产毛片精品| 国产精品一区免费在线| 精品国产一区二区三区噜噜噜| 精品久久久网| 日韩高清成人| 欧美在线资源| 亚洲一级淫片| 国产情侣久久| 国产v日韩v欧美v| 欧美精选一区二区三区| 男女男精品网站| 国产精品男女| 久久激情网站| 亚洲精品自拍| 久久三级毛片| 色综合www| 日韩在线观看一区二区| 97久久精品| 久久男人av资源站| 一区在线免费观看| 69堂免费精品视频在线播放| 福利欧美精品在线| 亚洲精品一区二区在线看| 亚洲一区二区三区四区电影| 国产精品久久久久毛片大屁完整版| 福利一区二区| 好吊视频一区二区三区四区| 中文字幕亚洲精品乱码| 久久a爱视频| 日韩在线观看| 久久国产66| 国产成人精选| 久久国产精品久久w女人spa| 久久精品99久久久| 久久九九电影| 日韩精品三区四区| 欧美激情另类| 综合亚洲视频| 国产欧美一级| 久久免费大视频| 日韩高清不卡一区| 亚洲成av人片一区二区密柚| 亚洲精品乱码久久久久久蜜桃麻豆| 久久久精品区| 免费日本视频一区| 精品资源在线| 久久av在线| 久久影院午夜精品| 91午夜精品| 欧美日韩国产高清电影| 国产欧美日本| 一区在线免费| 国产精品99视频| 91嫩草精品| 午夜国产精品视频| 国产一区三区在线播放| 日韩欧美2区| 黑丝一区二区三区| 久久久久久网| 日韩一区二区三区免费视频| 国产一区二区三区黄网站| 亚洲精品无播放器在线播放| 久久高清免费| 高清一区二区| 欧美日韩一区二区三区四区在线观看| 99精品在线观看| 欧美黄色一区| 亚洲精品伊人| 亚洲一区亚洲| 色吊丝一区二区| 久久这里只有| 日韩av影院| 六月丁香综合| 欧美成人综合| 激情视频网站在线播放色| 日韩欧美中文字幕一区二区三区| 国产一在线精品一区在线观看| 国产专区精品| 国产精品久久久久77777丨| 亚洲三级视频| 日韩中文字幕91| 欧美日韩日本国产亚洲在线| 日韩欧美国产精品综合嫩v| 久久精品资源| 国产精品午夜av| 日本久久一区| 天堂俺去俺来也www久久婷婷| 亚洲自拍另类| 亚洲综合不卡| 亚洲精品一区二区妖精| 久久久久伊人| 美女高潮久久久| 国产精品一区高清| 欧美精品国产白浆久久久久| 综合亚洲自拍| 日韩精品一区二区三区中文| 免费在线观看不卡| 玖玖玖国产精品| 蜜桃一区二区三区在线| 亚洲综合三区|