事件循环是维护 JavaScript 代码执行顺序(处理异步操作而不阻塞主线程)的循环。
这是一个无限循环,等待任务并将其推送到调用堆栈中执行。由于 JavaScript 是单线程的,它会维护一个执行顺序来根据优先级处理同步异步操作。
// Programmatic way of how the event loop processes tasks while (true) { // Step 1: Execute tasks in the call stack while (!callStack.isEmpty()) { const currentTask = callStack.pop(); currentTask(); // Executes the task } // Step 2: Process all microtasks while (!microTasksQueue.isEmpty()) { const microTask = microTasksQueue.shift(); callStack.push(microTask); // Push microtask to call stack for execution } // Step 3: Process one macrotask if available if (!macroTasksQueue.isEmpty()) { const macroTask = macroTasksQueue.shift(); callStack.push(macroTask); // Push macrotask to call stack for execution } // Break if there's nothing left to process if (callStack.isEmpty() && microTasksQueue.isEmpty() && macroTasksQueue.isEmpty()) { break; } }
让我们通过一个示例来更好地理解工作流程
1. setTimeout(() => console.log(1), 2000); 2. Promise.resolve().then(() => { 3. console.log(2); 4. queueMicroTask(() => console.log(3)); 5. }); 6. Promise.resolve().then(() => { 7. console.log(4); 8. setTimeout(() => console.log(5)); 9. }); 10. setTimeout(() => console.log(6)); 11. console.log(7); // 7 2 4 3 6 5 1
假设我们有 2 个队列 microTasks 和 macroTasks。当代码开始执行时,
感谢您的阅读!我希望您觉得这个博客内容丰富且引人入胜。如果您发现任何不准确之处或有任何反馈,请随时告诉我。
以上是事件循环——JavaScript的详细内容。更多信息请关注PHP中文网其他相关文章!