寒假生活指导 14
JavaScript 事件循环与异步机制解析
- 
单线程与事件循环 
 JavaScript 是单线程语言,通过事件循环(Event Loop)处理异步任务,避免阻塞主线程。核心组成:
 调用栈:按顺序执行同步代码。
 任务队列:存放异步回调(如 setTimeout)。
 微任务队列:存放 Promise.then、MutationObserver 等高优先级任务。
- 
执行顺序规则 
 同步代码优先执行(调用栈)。
 调用栈清空后,先清空微任务队列(所有微任务)。
 再执行任务队列中的一个宏任务(如 setTimeout)。
 重复循环。
 示例:
 console.log("1");
 setTimeout(() => console.log("2"), 0);
 Promise.resolve().then(() => console.log("3"));
 console.log("4");
 // 输出顺序:1 → 4 → 3 → 2
- 
宏任务 vs 微任务 
 宏任务:setTimeout、setInterval、DOM 事件。
 微任务:Promise.then、async/await、queueMicrotask。
 微任务优先级更高,会在当前宏任务结束后立即执行。
- 
async/await 的本质 
 async 函数返回 Promise。
 await 会暂停代码执行,直到 Promise 完成,但不会阻塞主线程。
 async function demo() {
 await Promise.resolve();
 console.log("Async完成");
 }
 demo();
- 
常见误区 
 setTimeout(fn, 0) 并非严格 0 毫秒:实际延迟至少 4ms(浏览器规范)。
 循环中的异步陷阱:
 for (var i = 0; i < 3; i++) {
 setTimeout(() => console.log(i), 0); // 输出 3, 3, 3
 }
 // 改用 let 或闭包解决作用域问题。
 总结:理解事件循环是掌握 JavaScript 异步编程的关键,它能避免代码阻塞,优化性能。进阶可探索 Web Workers 多线程或 Node.js 事件驱动模型!
 
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号