執(zhí)行棧與事件循環(huán)機(jī)制

1 .js執(zhí)行代碼的時(shí)候會(huì)將不同的變量存于內(nèi)存中的不同位置。堆中存的是對(duì)象,棧中存放一些基礎(chǔ)類型變量以及對(duì)象的指針
2 .當(dāng)調(diào)用一個(gè)方法的時(shí)候,js會(huì)生成一個(gè)與這個(gè)方法對(duì)應(yīng)的執(zhí)行環(huán)境,又叫執(zhí)行上下文。這個(gè)執(zhí)行環(huán)境中存放著這個(gè)方法的私有作用域,上層作用域的指向,方法的參數(shù)。這個(gè)作用域中定義的變量以及這個(gè)作用域的this對(duì)象。
3 .當(dāng)這些方法被依次調(diào)用的時(shí)候,因?yàn)閖s是單線程的,同一個(gè)時(shí)間執(zhí)行執(zhí)行一個(gè)方法,于是這些方法被排隊(duì)在一個(gè)單獨(dú)的地方,這個(gè)地方就是執(zhí)行棧
4 .一個(gè)方法執(zhí)行會(huì)向執(zhí)行棧中加入這個(gè)方法的執(zhí)行環(huán)境。這個(gè)執(zhí)行環(huán)境中甚至還可以調(diào)用其它方法,甚至自己,其結(jié)果不過是在執(zhí)行棧中在添加一個(gè)執(zhí)行環(huán)境。這個(gè)環(huán)境是可以無限進(jìn)行下去的,除非發(fā)生了棧溢出,及超過了所能使用內(nèi)存的最大值
5 .js引擎遇到異步事件后并不會(huì)一直等待其返回結(jié)果,而是會(huì)將這個(gè)事件掛起,繼續(xù)執(zhí)行執(zhí)行棧中的其他任務(wù),當(dāng)一個(gè)異步事件返回結(jié)果后---》重點(diǎn)。js會(huì)將這個(gè)事件加入與當(dāng)前執(zhí)行棧不同的另一個(gè)隊(duì)列。就是事件隊(duì)列
6 .被放入事件隊(duì)列的事件不會(huì)立刻執(zhí)行回調(diào),而是等待當(dāng)前執(zhí)行棧中的所有任務(wù)都執(zhí)行完畢,主線程處于閑置狀態(tài)時(shí)。主線程會(huì)查找事件隊(duì)列中是否有任務(wù),如果有的話,會(huì)從中取出排在第一位的事件,并把這個(gè)事件對(duì)應(yīng)的回調(diào)放入執(zhí)行棧中,然后執(zhí)行其中的同步代碼。如此反復(fù),成為一個(gè)循環(huán)

微任務(wù)和宏任務(wù)

1 .異步任務(wù)之間分為兩類微任務(wù)和宏任務(wù)
2 .根據(jù)異步事件的類型,這個(gè)事件實(shí)際上會(huì)被對(duì)分到對(duì)應(yīng)的宏任務(wù)或者微任務(wù)隊(duì)列中去。當(dāng)前執(zhí)行棧為空的時(shí)候,會(huì)立刻先處理所有微任務(wù)隊(duì)列中的事件,把對(duì)應(yīng)的回調(diào)加入當(dāng)前執(zhí)行棧,如此反復(fù),進(jìn)入循環(huán)
3 .然后采取宏任務(wù)隊(duì)列中取出一個(gè)事件,同一次事件循環(huán)中,微任務(wù)永遠(yuǎn)在宏任務(wù)之前執(zhí)行

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,626評(píng)論 1 32
  • JS為什么是單線程的? 最初設(shè)計(jì)JS是用來在瀏覽器驗(yàn)證表單操控DOM元素的是一門腳本語言,如果js是多線程的那么兩...
    船長___閱讀 2,317評(píng)論 1 15
  • 江寬不擇細(xì)流, 海闊可容百川, 天廣運(yùn)轉(zhuǎn)星月, 心明笑看眾生。
    六個(gè)菠蘿蜜閱讀 137評(píng)論 2 0
  • 故事的主線就是主角有愛情故事,主要是獲得了幾次改變時(shí)間的能力,然后會(huì)用完,人禍無可避天災(zāi)可免 這個(gè)主題 然后帶一些...
    Sachie_70d4閱讀 220評(píng)論 0 0
  • 總是被面試官問道你在項(xiàng)目中用到了什么設(shè)計(jì)模式,之前是在自己寫的ImageLoader中對(duì)緩存用了設(shè)計(jì)模式,但是由于...
    jacky123閱讀 1,575評(píng)論 0 1

友情鏈接更多精彩內(nèi)容