EventLoop
宏任务(MacroTask):
setTimeout、setInterval、setImmediate(浏览器暂时不支持,只有IE10支持,具体可见MDN)、I/O、UI Rendering。
MicroTask(微任务)
Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver(具体使用方式查看这里)
Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行
js
const promise = new Promise((resolve, reject) => {
console.log(1);
setTimeout(() => {
console.log(2);
resolve("success");
console.log(3); // 执行该任务会反复确认微任务是否为空
}, 0);
console.log(4);
});
promise.then((res) => {
console.log(5);
});
console.log(6);
//146235