js运行时-eventLoop

JS引擎到底做了什么来解析代码之前,我们首先需要知道解析工作所发生的环境。
以V8引擎为例,V8引擎会根据需要将JS的解析工作放到一下四个容器里处理

  • 堆:用于存储函数变量和函数声明;
  • 栈:根据函数之间调用与被调用的关系形成一个栈的数据结构,被调用的函数压入栈顶;根据先进先出的原则,先执行
  • 栈顶函数,返回后弹出栈,直到栈空;
  • Web API容器:事件监听函数、HTTP/AJAX请求、或者是定时器函数等,一旦达到触发条件,将回调放至回调队列尾部;
  • 回调队列:按照先进后出的原则,当主程序栈空时,会通知回调队列,将队列首部的回调函数放至执行栈执行;触发的事件回调会放在队列尾部;

JS将任务分为同步任务和异步任务,同步任务根据调用关系入执行栈,根据栈先进先出的特性执行任务;
异步任务在执行完成时,会将回调函数放入回调队列,按照先进后出的原则以此放入回调去执行。

分析详见:
【译】JS运行时环境