事件循环机制回调
事件循环机制事件循环机制(Event Loop)
Javascript为单线程,怎样处理任务
- 处理安排好的任务,按照顺序写进主线程里,等线程执行时,这些任务就是 按照顺序在线程中依次被执行;等所有任务执行完成之后,线程会自动退出。处理线程中产生的新任务,运用事件循环机制。
引入循环机制,在线程语句后面添加了一个 for 循环语句,让线程会一直循环执行。
引入事件,在线程运行过程中,等待用户的操作事件,等待过程中线程处于暂停状态,等接收到用户的操作之后再激活线程,然后继续执行。处理其他线程发送过来的任务,运用消息队列。
消息队列:一种数据结构,存放要执行的任务,队列先进先出
在线程之间添加一个消息队列其他线程产生新任务添加进消息队列尾部主线程循环地从消息队列头部读取任务
- 处理其他进程发送过来的任务
渲染进程专门有一个 IO 线程 用来接收其他进程传进来的消息,接收到消息之后,会将这些消息组装成任务发送给渲染主线程。处理高优先级的任务,运用微任务。
宏任务 macrotask / jobs:消息队列中的任务称为宏任务,每个宏任务中都包含了一个微任务队列,在执行宏任务的过程中,如果 DOM 有变化,那么就会将该变化添加到微任务列表中,这样就不会影响到宏任务的继续执行,因此也就解决了 执行效率 的问题。
微任务 microtask / task:等宏任务中的主要功能都直接完成之后,这时候,渲染引擎并不着急去执行下一个宏任务,而是 执行当前宏任务中的微任务,因为 DOM 变化的事件都保存在这些微任务队列中,这样也就解决了 实时性问题。微任务和宏任务是绑定的,每个宏任务在执行时,会创建自己的微任务队列单个任务执行时间过长,运用回调功能
因为所有的任务都是在单线程中执行的,所以 每次只能执行一个任务,而其他任务就都处于等待状态。如果其中一个任务执行时间过久,那么下一个任务就要等待很长时间。
针对这种情况,Javascript 是通过 回调功能 来规避这种问题的,也就是让要执行的 Javascript 任务滞后执行。
微任务包括 process.nextTick,promise,MutationObserver,其中 process.nextTick 为 Node.js 独有。宏任务包括


