单线程
JS的一大特点就是单线程,也就是同一时间内只能做一件事
这意味着所有的任务都需要排队,这样可能会造成页面的渲染不连贯
为了解决这个问题 H5中提出了Web Worker标准 运行JS创建多个线程,于是出现了同步和异步。
同步
前一个任务结束后再执行后一个任务 程序的执行顺序与任务的排列顺序是一致的、同步的。
异步
在做一件事的同时可以做其他的事情 创建多线程。
同步任务
同步任务都在主线程上执行,形成一个执行栈。
异步任务
JS的异步是通过回调函数实现的,形成一个任务队列也称消息队列,常见的异步任务:
1.普通事件,eg:click、resize等
2.资源加载,eg:load、error等
3.定时器,eg:setInterval、setTimeout等
JS执行机制
1.先执行执行栈中的同步任务;
2.异步任务(回调函数)放入任务队列中
3.一旦执行栈中的所有同步任务执行完毕,系统会按次序读取任务队列中的异步任务,则被读取的异步任务结束等待状态,进入执行栈开始执行。
异步进程处理
普通事件只有在事件发生之后异步任务才会被异步进程处理放到到任务队列中去。
事件循环—event loop(这里主要是说浏览器事件循环)
由于主线程不断重复获得任务、执行任务、再获取任务、再执行,这种机制就被称为事件循环(event loop)。
说明:该图出自b站pink老师视频的截图,如侵私删。