摘要:基本知識棧先進后出函數調用函數調用函數。而真正的值依然存在中,然后由垃圾回收器自動的清理回收。異步任務是由瀏覽器執行的。當任務執行完之后,瀏覽器會將任務執行的結果和實現定義的回調函數放入主線程中。
基本知識
棧:先進后出
函數a調用函數b,b調用函數c。執行函數a,a入棧,a調用b, b入棧, b調用c,c入棧,c執行,返回結果,彈出棧,依次類推,最后a出棧 === 》先進后出
指針:當函數執行完畢后
基本數據類型會從 stack 中彈出
對象、數組的值是存在于 heap(堆) 中的,stack 只彈出指針了他們對應的指針。而真正的值依然存在 heap 中,然后由垃圾回收器自動的清理回收。
異步任務是由瀏覽器執行的。當任務執行完之后,瀏覽器會將任務執行的結果和實現定義的回調函數放入主線程中。所以當主線程任務阻塞的時候,任務隊列還是可以正常進行的。
macro tasks 和 micro tasks 分類沒有找到很官方的定義,這個與瀏覽器引擎相關,看瀏覽器引擎怎么定義任務的分類,以下是比較普遍的分類
macro tasks: 定時器、http、IO操作(setTimeout, setInterval, setImmediate, I/O, UI rendering)
micro tasks: process.nextTick, Promises, Object.observe(廢棄), MutationObserver
執行順序在同一輪執行中,micro tasks優先級比macro tasks高
在執行同步任務過程中,碰到了macro tasks或者micro tasks,將其放入相對應的棧中。
先將所有的同步任務執行完
查看micro tasks,里面是否有任務,有的話,執行完所有的任務。
micro tasks執行過后,查看macro tasks,查看里面是否有任務,如果有,執行第一個放入的任務。
micro tasks執行完一個后,重復步驟1,2,3,4。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98077.html
摘要:的回調函數正是處于隊列之中。將看做會導致性能問題,回調函數可能會因為渲染等相關產生不必要的延后。瀏覽器是怎么出錯的和在兩次點擊操作之間運行完成了所有的,就比如的回調函數所展示的,但是似乎有不同的排序算法。 帶有可視代碼執行順序的原文鏈接https://jakearchibald.com/201...,此篇文字并非其完整翻譯,加入了一部分自己的理解,比如將其中的task替換為macrot...
摘要:的回調函數正是處于隊列之中。將看做會導致性能問題,回調函數可能會因為渲染等相關產生不必要的延后。瀏覽器是怎么出錯的和在兩次點擊操作之間運行完成了所有的,就比如的回調函數所展示的,但是似乎有不同的排序算法。 帶有可視代碼執行順序的原文鏈接https://jakearchibald.com/201...,此篇文字并非其完整翻譯,加入了一部分自己的理解,比如將其中的task替換為macrot...
摘要:任務隊列是一個事件隊列,只要指定過回調函數的事件在事件發生時就會進入任務隊列。回調函數會被主線程掛起來的代碼,異步任務必須指定回調函數。 1、靜態公有方法 (function(){ var privateVariable=10; function privateFunction(){ return false; } MyObject=fu...
閱讀 3214·2023-04-25 18:43
閱讀 892·2021-11-24 09:39
閱讀 1361·2021-10-14 09:43
閱讀 3890·2021-09-22 15:58
閱讀 1899·2019-08-29 17:18
閱讀 410·2019-08-29 14:14
閱讀 3078·2019-08-29 13:01
閱讀 1616·2019-08-29 12:33