亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS內部事件機制之單線程原理

2019-11-19 13:34:50
字體:
來源:轉載
供稿:網友

任務隊列

主線程:正在執行的代碼,會生成函數調用棧。

  • macro-task(宏任務,新名:task)包括:script(整體代碼), setTimeout, setInterval, setImmediate, I/O, UI rendering。
  • micro-task(微任務,新名:jobs)包括: process.nextTick, Promise, Object.observe(已廢棄), MutationObserver(html5新特性,隊列中只能有一個)

任務分類

同步任務,語句只按語句先后順序執行,前面未執行完,不會執行后面語句。

異步任務,語句不在語句先后順序上執行,執行到該代碼時,加入到相應任務隊列,延后執行。

單線程

主線程從 script (整體代碼)開始第一次循環。之后全局上下文進入函數調用棧。直到調用棧清空(只剩全局),然后執行所有的 jobs。當所有可執行的 jobs 執行完畢之后。循環再次從 task 開始,找到其中一個任務隊列執行完畢,然后再執行所有的 jobs,這樣一直循環下去。

注意事項

  • setTimeout 最小間隔不能低于 4 毫秒,否則會自動增加。
  • DOM 的渲染每 16 毫秒執行一次,因為顯示器是 60 Hz,16ms 刷新一次。
  • process.nextTick 任務會在 jobs 里單獨維護一個隊列,并且在其他 jobs 任務之前執行。
  • 冒泡事件會直接在子元素事件執行完成后,插入在主線程中。如果主線程不為空,那么會優先于 jobs 執行。

經典示例

示例詳解:https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/

通過鼠標點擊

<div class="outer"> <div class="inner"></div></div>// Let's get hold of those elementsvar outer = document.querySelector('.outer');var inner = document.querySelector('.inner');// Let's listen for attribute changes on the// outer elementnew MutationObserver(function() { console.log('mutate');}).observe(outer, { attributes: true});// Here's a click listener…function onClick() { console.log('click'); setTimeout(function() {  console.log('timeout'); }, 0); Promise.resolve().then(function() {  console.log('promise'); }); outer.setAttribute('data-random', Math.random());}// …which we'll attach to both elementsinner.addEventListener('click', onClick);outer.addEventListener('click', onClick);// 輸出結果clickmutateclickmutatepromisepromisetimeouttimeout

進階--通過js執行

<div class="outer"> <div class="inner"></div></div>// Let's get hold of those elementsvar outer = document.querySelector('.outer');var inner = document.querySelector('.inner');// Let's listen for attribute changes on the// outer elementnew MutationObserver(function() { console.log('mutate');}).observe(outer, { attributes: true});// Here's a click listener…function onClick() { console.log('click'); setTimeout(function() {  console.log('timeout'); }, 0); Promise.resolve().then(function() {  console.log('promise'); }); outer.setAttribute('data-random', Math.random());}// …which we'll attach to both elementsinner.addEventListener('click', onClick);outer.addEventListener('click', onClick);inner.click();// 輸出結果clickclickmutatepromisepromisetimeouttimeout

由于點擊事件是 js 執行的,inner 的 onClick 函數執行完成時,inner.click() 語句的作用域還沒有退棧,主線程調用棧不是空的,導致 jobs 隊列任務不會執行,mutate 和 promise 語句都未能在事件循環中執行到。從而執行了 outer 的 onClick 函數。outer 的 onClick 函數執行完成后,inner.click() 語句才退棧,繼而執行 jobs 的任務。

只有一個 mutate 是由于 jobs 隊列中,只能有一個 MutationObserver 任務,第二次創建時,前一個 MutationObserver 任務沒有執行,顧不再創建。

總結

以上所述是小編給大家介紹的JS內部事件機制之單線程原理,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本午夜在线亚洲.国产| 亚洲精品美女久久久| 欧美在线观看视频| 亚洲人成电影在线| 亚洲裸体xxxx| 精品福利在线看| 日韩精品在线观看一区二区| 91丨九色丨国产在线| 亚洲精品按摩视频| 亚洲欧美综合区自拍另类| 97免费视频在线播放| 亚洲国产精品久久精品怡红院| 7m第一福利500精品视频| 最近2019年好看中文字幕视频| 日韩性xxxx爱| 亚洲国产日韩欧美在线99| 久久精品99久久久久久久久| 亚洲天堂一区二区三区| 色青青草原桃花久久综合| 琪琪亚洲精品午夜在线| 亚洲欧美一区二区三区在线| 国产精品久久久久久久久久免费| 国产精品高清在线| 日本精品久久电影| 成人国产在线视频| 国产高清在线不卡| 91tv亚洲精品香蕉国产一区7ujn| 亚洲第一中文字幕| 国产欧美一区二区三区在线| 九色精品免费永久在线| 国产精品自产拍在线观看| 精品自拍视频在线观看| 亚洲日本欧美日韩高观看| 亚洲精品一区二区久| 成人黄色免费看| 日韩精品免费一线在线观看| 国产精品高潮视频| 97视频免费看| 国产精品网红直播| 亚洲精品美女久久| 韩国精品美女www爽爽爽视频| 国产日韩中文字幕在线| 成人网在线观看| 日韩精品中文字幕有码专区| 92看片淫黄大片看国产片| 国产精品一久久香蕉国产线看观看| 国产精品日韩一区| 久久久久久久久久国产精品| 亚洲美女av在线| 日韩精品在线免费观看| 国产成人亚洲精品| 亚洲欧美日韩一区二区三区在线| 久久九九免费视频| 欧美高清电影在线看| 一区二区三区精品99久久| 久久91精品国产91久久跳| 久久国产精品影视| 精品无人区太爽高潮在线播放| 日本精品视频网站| 亚洲老头同性xxxxx| 欧美另类在线观看| 国产精品在线看| 一个人看的www久久| 欧美日韩国产二区| 欧美麻豆久久久久久中文| 亚洲黄色在线观看| 欧美性受xxx| 91久久精品美女| 亚洲欧美在线x视频| 久久久久久高潮国产精品视| 欧美尺度大的性做爰视频| 91麻豆国产语对白在线观看| 中文字幕9999| 亚洲成人激情小说| www.国产一区| 亚洲自拍偷拍一区| 国产在线a不卡| 国产欧美日韩丝袜精品一区| 亚洲国产日韩欧美综合久久| 国产精品三级久久久久久电影| 社区色欧美激情 | 午夜免费在线观看精品视频| 国产精品高潮呻吟视频| 国产免费成人av| 久久精品国产亚洲一区二区| 国产成人涩涩涩视频在线观看| 成人夜晚看av| 2018国产精品视频| 亚洲精品国产综合久久| 日本久久精品视频| 国产精品最新在线观看| 日韩中文字在线| 亚洲欧美日本伦理| 亚洲va欧美va国产综合剧情| 亚洲成人网在线观看| 亚洲老头同性xxxxx| 国产这里只有精品| 国产精品入口福利| 国产一区av在线| 欧美日本高清视频| 日韩美女视频在线观看| 亚洲的天堂在线中文字幕| 国内精品久久久久伊人av| 亚洲精品成人久久久| 亚洲自拍av在线| 亚洲欧美一区二区三区久久| 欧美天堂在线观看| 7m第一福利500精品视频| 久久国产精品影视| 亚洲国产高潮在线观看| 国产盗摄xxxx视频xxx69| 爱福利视频一区| 日韩精品中文字幕有码专区| 亚洲天堂精品在线| 青青久久av北条麻妃海外网| 青青精品视频播放| 欧美中文字幕在线| 欧美日韩第一页| 懂色aⅴ精品一区二区三区蜜月| 国语自产精品视频在线看抢先版图片| 精品国产31久久久久久| 久久久国产视频91| 91在线观看免费高清| 亚洲精品美女在线| 91精品久久久久久久久久另类| 国产精品成人av在线| 91网站在线免费观看| 久久久久久久久综合| 亚洲精品白浆高清久久久久久| 亚洲欧洲成视频免费观看| 欧洲永久精品大片ww免费漫画| 中文字幕日韩综合av| 91久久精品国产| 中文字幕精品av| 91久久在线播放| 国产热re99久久6国产精品| 亚洲视频在线观看网站| 欧美在线日韩在线| 97精品国产97久久久久久免费| 成人高h视频在线| 亚洲视频精品在线| 日韩精品在线观看网站| 欧美日韩性生活视频| 欧美性69xxxx肥| 国产精品精品国产| 亚洲国产精品久久久久秋霞不卡| 欧美在线视频观看免费网站| 亚洲天堂日韩电影| 国产成人一区二区| 揄拍成人国产精品视频| 日韩欧美国产骚| 久久69精品久久久久久久电影好| 国产视频精品xxxx| 亚洲第一色在线| 成人在线国产精品| 久久99精品久久久久久青青91| 欧美成人激情视频| 日韩禁在线播放| 米奇精品一区二区三区在线观看| 九九精品在线播放| 久久久久久噜噜噜久久久精品| 色悠久久久久综合先锋影音下载| 国产精品福利无圣光在线一区| 欧美另类高清videos|