在JavaScript中,事件循环(Event Loop)是一种管理异步编程的机制,它允许JavaScript代码在等待外部资源(如网络请求、定时器等)时不会阻塞程序的执行。事件循环分为宏任务(MacroTask)和微任务(MicroTask)两类,它们分别在不同的时机执行。 1. JavaScript的事件循环机制 JavaScript的事件循环机制允许程序在等待某些异步操作(如...
合理利用微任务:由于微任务的优先级高于宏任务,因此可以在不阻塞其他宏任务的情况下快速执行一些操作,提高程序的响应速度和性能。 避免滥用微任务:虽然微任务可以提高性能,但滥用微任务可能导致调用栈过深,从而影响程序的稳定性和性能。 理解事件循环的运作机制:了解事件循环的运作机制有助于我们更好地编写异步代码,避免一些...
new Promise立即执行输出11,then也分发到微任务队列中,记为then3 第三轮事件循环宏任务执行结束,执行两个微任务process3和then3。 执行process3,输出10。 执行then3,输出12。 第三轮事件循环结束,第三轮输出9,11,10,12。 整段代码,共进行了三次事件循环,完整的输出为1,7,6,8,2,4,3,5,9,11,10,12。 总...
宏任务: setInterval() setTimeout() 微任务: new Promise() 在一个事件循环中,异步事件返回结果会被放到一个任务队列中。 在当前执行栈为空的时候,主线程会查看微任务队列是否有事件存在。如果不存在,那么再去宏任务队列 中取出一个事件并把对应的回调加入当前执行栈;如果存在,则会依次执行队列中事件对应的回调,...
1.主任务(主线程)-> 2. 微任务(清空一次) -> 3.宏任务(每执行一个清空一次微任务)。 ↑___循环执行___| 这种循环机制叫做:任务循环(event loop) 主线程-微任务-宏任务 练习:(如何使用async、await、Promise以及各种任务的执行特点) async function fn(...
首先执行script下的宏任务,遇到setTimeout,将其放到宏任务的【队列】里 遇到newPromise直接执行,打印"马上执行for循环啦"遇到then方法,是微任务,将其放到微任务的【队列里】 打印"代码执行结束"本轮宏任务执行完毕,查看本轮的微任务,发现有一个then方法里的函数,打印"执行then函数啦"到此,本轮的eventloop 全部完成...
微任务(micro-task): process.nextTick(node v8机制引擎里有个专门的宏任务去解析) Promise(准确的说是new Promise().then()) Async/Await(实际就是promise) MutationObserver(html5新特性) 执行流程 先执行宏任务(特指js主线程)- 执行完毕 先询问是否有可执行的微任务,如果没有再去执行宏任务,如果有微任务,先...
Node端事件循环中的异步队列也是这两种:macro(宏任务)队列和 micro(微任务)队列。 常见的 macro-task 比如:setTimeout、setInterval、setImmediate、script(整体代码)、I/O 操作等。 常见的 micro-task 比如:process.nextTick、new Promise().then(回调)等。
微任务是指在当前任务执行完成后立即执行的任务,微任务会在宏任务之前执行。 事件循环的执行过程如下: 执行当前宏任务中的同步代码,直到遇到异步操作。 将异步操作加入到相应的任务队列中。如果是宏任务,加入宏任务队列;如果是微任务,加入微任务队列。 继续执行下一个宏任务,重复步骤 1 和步骤 2。 当前宏任务执行完成...
要理解这些你首先需要对事件循环机制处理宏任务和微任务的方式有了解。 如果是第一次接触信息量会有点大。深呼吸…… 每个线程都会有它自己的event loop(事件循环),所以都能独立运行。然而所有同源窗口会共享一个event loop以同步通信。event loop会一直运行,来执行进入队列的宏任务。一个event loop有多种的宏任务...