javascriptjs css html

js执行任务流程最详细讲解

2023-03-09  本文已影响0人  扶得一人醉如苏沐晨

一、JS是单线程

JS语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。
单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。
这样所导致的问题是:
如果JS执行的时间过长,这样会造成页面的渲染不连贯,导致页面渲染加载阻塞

二、同步和异步

为了解决这个问题,利用多核CPU的计算能力,HTML5提出了Web Worker标准,允许JS脚本创建多个线程,于是,jS中出现了同步和异步

同步:前一个任务结束后再执行后一个任务,程序的执行顺序与任务的排列顺序是一致的,同步的。比如:我们要烧水煮饭,等水开了(10分钟后),再去切菜,炒菜

异步:你在做一件事情时,因为这件事会花费很长时间,在做这件事的同时,你还可以去处理其他事情。比如烧水的10分钟内,去切菜,炒菜

同步任务:在主线程上排队执行任务,只有前一个任务执行完毕,才能执行后一个任务

异步任务:不进入主线程,而是进入"任务队列"的任务

一般而言,异步任务有以下四种类型

1、setTimeout和setlnterval

2、DOM事件 普通事件如:click、resize,资源加载事件:onload等

3、ES6中的Promise

4、Ajax异步请求

异步任务相关回调函数添加到任务队列中(消息队列)

image

三、任务队列里面又分为宏任务与微任务

常见的 微任务 有 MutationObsever 、 Promise.then 、$nextTick
常见的 宏任务 有 setTimeout、MessageChannel、postMessage、setImmediate;

image image image

因为promise.then $nextTick()是个微任务,setTimeout是个宏任务,所以先输出promise。

接下来我们看如下代码,看起来有点复杂,但是我们记住一个原则,“先执行同步代码,再执行微任务,最后执行宏任务”,这样就会清晰很多'

image image
上一篇下一篇

猜你喜欢

热点阅读