事件队列&事件循环机制

本文介绍了JavaScript的单线程特性以及如何通过事件队列和事件循环机制实现异步处理。虽然JavaScript看起来可以同时处理多个任务,但实际上它通过在不同时间点执行宏任务和微任务来模拟异步行为。例如,定时器会在到达设定时间时执行,而Promise等微任务则在当前宏任务执行完毕后立即执行。通过一系列例题,读者可以深入理解这一机制。
摘要由CSDN通过智能技术生成

单线程JS

浏览器是多线程的,但它只分配一个线程供JS自上而下运行,因此JS是单线程的。
基于JS的单线程机制,大部分操作都是同步进行的,也就是任务逐一执行。
但有一些特殊需求,需要按照异步的思维进行处理。

但注意:JS没有真正的异步,只是基于事件队列(Event Queue)和事件循环(Event Loop)机制把一些方法延后执行而已。宏观上貌似是同时在做好几件事,其实就是一会儿做做这个,一会儿做做那个,真正同一时间段内只能做一件事。

AJAX请求除外,此时浏览器会另外分配一个线程进行HTTP事务。

几道例题彻底掌握Event Queue和Event Loop

例1. 入门级

let n = 0;
setTimeout(_ => {
	n += 10;
	console.log(n);
},1000);
n += 5;
console.log(n);

在这里插入图片描述
先列举一下浏览器端常见的宏任务和微任务:

  • 宏任务:
    • 定时器、事件绑定、AJAX/跨域(HTTP请求)
  • 微任务:
    • Promise相关——resolve、reject、await、Generator中的yeild等。注意:Promise本身并不是异步的。

例2. 定时器</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值