前言:
js是一门单线程语言,所以它本身是不可能异步的,但是js的宿主环境(比如浏览器、node)是多线程,宿主环境通过某种方式(事件驱动)使得js具备了异步的属性。而在js中,我们一般将所有的任务都分成两类,一种是同步任务,另外一种是异步任务。而在异步任务中,又有着更加细致的分类,那就是微任务和宏任务 1.概念
1.1宏任务宏任务 ---- setTimeout 、setInterval 、DOM 事件、AJAX 请求 浏览器为了能够使得JS内部task与DOM 任务能够有序的执行,会在一个task 执行结束后,在下一个 task 执行开始前,对页面进行重新渲染 (task->渲染->task->…) 1.2微任务微任务 ---- Promise 、async /await 微任务通常来说就是需要在当前 同步任务 执行结束后立即执行的任务,比如对一系列动作做出反馈,或者是需要异步的执行任务而又不需要分配一个新的任务,这样便可以减小一点性能的开销。 2.执行顺序
先来看一段代码,在来探讨执行顺序: console.log(1) setTimeout(() => { console.log(2) }) Promise.resolve().then(() => { console.log(3) }) console.log(4) 上面段代码打印的结果为1 4 3 2 。从上面代码,可以得出他们的执行顺序是: 下载地址: JavaScript中的异步能省掉await吗? vue 按钮 权限控制介绍
|