单线程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. 定时器</

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

被折叠的 条评论
为什么被折叠?



