【JS】何为事件循环(eventLoop)?它有什么用?事件循环与任务队列详析

JS为什么是单线程语言?

众所周知,JS语言运行在浏览器当中,页面里面有可视的Dom,如果是多线程的话,这个线程正在删除DOM节点,另一个线程正在编辑Dom节点,导致浏览器不知道该听谁的,为了避免复杂性和冲突,JS语言从诞生时就是一个单线程语言,即同一时间只能去做一件事。

实际上,利用多核CPU的计算能力,HTML5提出Web Wroker标准,允许javaScript脚本创建多个线程,主线程用来执行同步任务,其他线程用来执行异步任务。

作为单线程语言,JS如何实现异步任务?

异步任务是指在条件触发时立即执行的任务,是不按照代码顺序执行的任务,浏览器也不确定何时能够完成它,可能是0.1s,也可能需要10多秒,为了用户更好的体验,不让异步任务阻塞主线程,JS提出了任务队列和事件循环机制来解决这个问题。

一般而言,异步任务有以下三种类型:
1、普通dom事件,如click、resize等
2、资源加载,如load、arror、网络请求等
3、定时器,包括setInterval、setTimeout等

任务队列:JS把代码分为同步任务和异步任务,同步任务进入主线程从上往下依次执行,异步任务进入一个任务队列当中,当主线程执行完同步任务后,主线程才会去执行任务队列里面的异步任务。

事件循环:JS主线程在执行完同步任务后,主线程不断地从任务队列中获取、执行任务的循环过程就叫做事件循环。

事件循环的出现使得JS这个单线程语言不会出现阻塞情况,提高了用户使用体验。

任务队列分为几类?

只有异步任务才会进入任务队列,异步任务又分为宏任务和微任务,主线程会优先选择微任务执行。

常见的异步任务:

宏任务:定时器、

微任务:promise.then的回调函数、process.nextTick(node.js环境)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值