摘要:基本知识栈先进后出函数调用函数调用函数。而真正的值依然存在中,然后由垃圾回收器自动的清理回收。异步任务是由浏览器执行的。当任务执行完之后,浏览器会将任务执行的结果和实现定义的回调函数放入主线程中。
基本知识
栈:先进后出
函数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。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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...
阅读 3197·2023-04-25 18:43
阅读 862·2021-11-24 09:39
阅读 1340·2021-10-14 09:43
阅读 3866·2021-09-22 15:58
阅读 1830·2019-08-29 17:18
阅读 371·2019-08-29 14:14
阅读 3048·2019-08-29 13:01
阅读 1575·2019-08-29 12:33