单线程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请求)
- 微