js的执行机制 — 事件循环机制
warning:
这篇文章距离上次修改已过196天,其中的内容可能已经有所变动。
JavaScript的执行机制基于事件循环(Event Loop)。事件循环主要有几个阶段:
- 宏任务(Macro Task):一般指执行整体的任务,如script全部代码,setTimeout,setInterval。
- 微任务(Micro Task):执行的任务较小,如Promise。
当JavaScript运行时,会有一个执行栈和一个任务队列。执行栈是JavaScript执行代码时的工作空间,任务队列是存放异步任务的空间。
事件循环的步骤如下:
- 检查执行栈是否为空,如果为空,则执行微任务队列中的任务。
- 处理完微任务后,再处理宏任务队列中的任务。
- 重复步骤1和步骤2,直到所有任务都处理完毕。
例子代码:
console.log('script start');
setTimeout(function() {
console.log('setTimeout');
}, 0);
Promise.resolve().then(function() {
console.log('promise');
});
console.log('script end');
// 输出顺序为: script start, script end, promise, setTimeout
在这个例子中,首先执行同步代码,其中包括记录"script start"和"script end"。然后执行setTimeout中的代码,它被放入宏任务队列中。接着是Promise,它的.then函数被放入微任务队列中。当同步代码执行完毕后,JavaScript运行时开始检查微任务队列,记录"promise",然后处理宏任务队列中的setTimeout任务,记录"setTimeout"。
评论已关闭