Js Event loop 學(xué)習(xí)筆記

面試問到了這個,之前只了解JavaScript的對象原型椒振,作用域這些昭伸,這回認(rèn)真理解一下單線程的執(zhí)行邏輯。

對于JS來說澎迎,語言一大特點(diǎn)就是單線程庐杨,這是在原語言設(shè)計為dom操作腳本時因為復(fù)雜的同步問題設(shè)計成的。

為了避免dom操作沖突的復(fù)雜性嗡善,js單線程變成了一大特征不會改變辑莫。而單線程就意味著所有任務(wù)需要排隊,前一個任務(wù)完成時再執(zhí)行后面的罩引。

ps:對象被分配在一個堆中,即用以表示一個大部分非結(jié)構(gòu)化的內(nèi)存區(qū)域枝笨,占用內(nèi)存但不分擔(dān)任務(wù)只做存儲袁铐。

runtime

所有任務(wù)分成同步sync和異步任務(wù)async,所有同步任務(wù)直接在主線程上執(zhí)行横浑,形成執(zhí)行棧剔桨。

每一個棧的楨執(zhí)行完才會執(zhí)行下一楨,執(zhí)行時需要調(diào)用函數(shù)時徙融,直接在該處使調(diào)用函數(shù)進(jìn)棧洒缀,于棧頂立即執(zhí)行。

而如setTimeout和ajax等,則相當(dāng)于同步執(zhí)行時树绩,添加一個異步任務(wù)到異步任務(wù)隊列中萨脑。

所有異步隊列在同步,即執(zhí)行棧饺饭,執(zhí)行完后再按結(jié)果完成狀態(tài)和先后進(jìn)入順序的開始執(zhí)行渤早。

異步隊列子任務(wù)被吊起時,相當(dāng)于執(zhí)行同步任務(wù)一樣瘫俊,調(diào)入執(zhí)行棧鹊杖,執(zhí)行可執(zhí)行同步函數(shù)和調(diào)用函數(shù),需要時再吊起異步任務(wù)到異步隊列中扛芽。

主進(jìn)程不斷執(zhí)行上述循環(huán)骂蓖,可能這就是事件循環(huán)的意思吧。

特點(diǎn)

(function() {

  console.log('this is the start');

  setTimeout(function cb() {
    console.log('this is a msg from call back');
  });
    // for (var i = 9999; i >= 0; i--) {
        console.log('this is just a message');
    // }
  setTimeout(function cb1() {
    console.log('this is a msg from call back1');
  }, 0);

  console.log('this is the end');

})();

上面的例子就能看出執(zhí)行順序了川尖,即使是0延遲的setTimeout涯竟,他還是會等到前面的所有同步任務(wù)執(zhí)行完再執(zhí)行,即使同步任務(wù)中可能有
執(zhí)行時間超久的(如:for)空厌,他還是會等候同步棧執(zhí)行完再執(zhí)行異步隊列相關(guān)庐船,這就是Js的其中一個特點(diǎn)"執(zhí)行至完成"。

"執(zhí)行至完成"的意思就是嘲更,只有前面的同步任務(wù)筐钟,函數(shù)執(zhí)行完,才會執(zhí)行后面的赋朦,他不能被搶占篓冲。因此存在缺點(diǎn),一個同步任務(wù)或者函數(shù)
如果長時間掛著的話宠哄,是不能執(zhí)行其他交互函數(shù)的壹将,整個頁面或者交互就僵住了。毛嫉。诽俯。所以同步不應(yīng)該寫太長久的邏輯或者可以剪開,或者分成異步寫
或者寫時間限制catch超時承粤。

有了這個特點(diǎn)暴区,就可以讓js無堵塞,只進(jìn)行快速的同步任務(wù)辛臊,不會因為交互的異步堵塞仙粱,可以在等待響應(yīng)的同時執(zhí)行其他項任務(wù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彻舰,一起剝皮案震驚了整個濱河市伐割,隨后出現(xiàn)的幾起案子候味,更是在濱河造成了極大的恐慌,老刑警劉巖隔心,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件白群,死亡現(xiàn)場離奇詭異,居然都是意外死亡济炎,警方通過查閱死者的電腦和手機(jī)川抡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來须尚,“玉大人崖堤,你說我怎么就攤上這事∧痛玻” “怎么了密幔?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撩轰。 經(jīng)常有香客問我胯甩,道長,這世上最難降的妖魔是什么堪嫂? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任偎箫,我火速辦了婚禮,結(jié)果婚禮上皆串,老公的妹妹穿的比我還像新娘淹办。我一直安慰自己,他們只是感情好恶复,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布怜森。 她就那樣靜靜地躺著,像睡著了一般谤牡。 火紅的嫁衣襯著肌膚如雪副硅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天翅萤,我揣著相機(jī)與錄音恐疲,去河邊找鬼。 笑死断序,一個胖子當(dāng)著我的面吹牛流纹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播违诗,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疮蹦!你這毒婦竟也來了诸迟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阵苇,沒想到半個月后壁公,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绅项,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年紊册,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片快耿。...
    茶點(diǎn)故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡囊陡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出掀亥,到底是詐尸還是另有隱情撞反,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布搪花,位于F島的核電站遏片,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撮竿。R本人自食惡果不足惜吮便,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望幢踏。 院中可真熱鬧髓需,春花似錦、人聲如沸惑折。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惨驶。三九已至白热,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粗卜,已是汗流浹背屋确。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留续扔,地道東北人攻臀。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像纱昧,于是被迫代替她去往敵國和親刨啸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容