LLwanran / front_end_studying

前端知识要点
https://llwanran.github.io/front_end_studying/
2 stars 1 forks source link

聊聊Event Loop(深圳平安科技17年夏电面我的题) #4

Open LLwanran opened 5 years ago

LLwanran commented 5 years ago

Event Loop(事件循环)是指浏览器或Node的一种解决js单线程运行时不会阻塞的机制,也就是我们经常使用异步的原理

Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行

JS 调用栈

是一种后进先出的数据结构

同步任务、异步任务

JavaScript 单线程中的任务分为同步任务和异步任务,每次调用栈的同步任务执行完毕,就会去任务队列中取出完成的异步任务
【在js中,任务分两种】
  1. 宏任务(MacroTask),包括:script(整体代码)、setTimeout、setInterval、setImmediate(暂时仅IE10支持)、I/O、UI Rendering、postMessage、MessageChannel(Web Worker)
  2. 微任务(MicroTask),包括:Process.nextTick(Node)、Promise、Object.observe(废弃)、MutationObserver 微任务和宏任务皆为异步任务,它们都属于一个队列,主要区别在于他们的执行顺序

任务队列Task Queue

是一种先进先出的数据结构