JS是单线程运行的,所以其中大部分代码都是“同步”的(例如:循环。。。)
- 所以在JS中千万不要写死循环、死递归。。。等操作,这些操作会一直占用JS引擎线程,导致后续其他的程序都无法执行
- 但是JS中也有部分异步操作的代码
- 【异步微任务】
- requestAnimationFrame
- Promise.then/catch/finally
- async/await
- queueMicrotask 手动创建一个异步的微任务
- MutationObserver
- IntersectionObserver
- ...
- [异步宏任务]
- setTimeout/setInterval
- 事件绑定/队列
- XMLHttpRequest/Fetch
- MessageChannel
- ...
- 【异步微任务】
JS中的异步操作是:借用浏览器的多线程机制,再基于EventLoop事件循环机制,实现的单线程异步效果!!
setTimeout(() => {
console.log(1);
}, 20);
定时器也不是立即执行,而是要等待5~7ms「浏览器最快处理时间」