javaScript的事件处理机制+promise异步任务和定时器的先后执行顺序

发布于:2023-01-24 ⋅ 阅读:(10) ⋅ 点赞:(0) ⋅ 评论:(0)
前言:

我们都知道javascript是脚本语言,用来操作文档的节点,默认是文档的自上而下顺序执行的,为了避免操作页面节点出现混乱,便在这门语言被设计开发出来时,就被设定为单线程语言,是按文档的书写顺序执行的。

javaScript的事件处理机制

概念:进程与线程;同步与异步任务;宏任务与微任务

一、进程与线程

一个程序只有一个进程,一个进程包含多个线程,单线程和多线程

二、同步与异步任务

同步任务:是指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。按顺序执行,可以看做单线程,javascript脚本语言是单线程,避免页面标签杂乱无序。
异步任务: 执行顺序是不确定的,由触发条件决定,什么时间执行也是不确定的。
异步任务分类

  1. 定时器setTimeout/setInterval是宏任务
  2. ajax的异步请求
  3. Promise的异步处理机制
三、宏任务与微任务

先执行微任务,再执行宏任务。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例:控制台输出顺序如下

(1).同步与异步任务,输出顺序
同步与异步任务
在这里插入图片描述

(2).Promise的异步处理机制
概念:Promise属于微任务,定时器setTimeout/setInterval是宏任务。先微任务,后宏任务。
在这里插入图片描述
思考一下:如果给Promise异步处理机制,定时器设置相同的等待执行时间,执行顺序是什么?
在这里插入图片描述
在这里插入图片描述
总结:Promise属于JavaScript引擎内部任务;SetTimeout是浏览器API引擎内部任务的优先级高于浏览器的API