js的event loop
做一个小记录关于 js的事件循环
我们都知道js是一门单线程语言,程序运行时又有同步和异步代码,这时候程序的运行方式就需要考虑 event loop机制了。
事件循环。
我的理解是 js 在编译运行代码时,会把程序分成三种优先级不一样的块。
第一种: 普通函数
在call stack中调用,执行到函数就丢进call stack(函数执行栈),来一个我丢一个,然后从栈顶一个一个执行。
1 function foo(){
2
3 bar()
4
5 baz()
6
7 }
8
9 foo()//运行 丢进 call stack 1.foo 2.bar进来 bar出去 3.baz进来 baz出去
就是这样 call stack 来来往往 他们都是同步代码 从不逗留
第二种: 宏任务(macro-task)
这种任务 一般有
script(整体代码), setTimeout, setInterval, setImmediate, I/O, UI rendering。
没错 遇到以上类型的代码 就会把这些代码推进一个叫做 macro-task的队列中 ;
第三种:微任务(micro-task)
这种任务一般有
process.nextTick, Promises, Object.observe, MutationObserver
他们会把任务 推进一个叫做 micro-task的队列中
他们的优先级为 函数栈 > 微任务 > 宏任务
也就是说 碰到 函数栈先执行函数栈 全部执行完了 函数栈问问 微任务 还有没有活 微任务做完了 问问宏任务 还有没有活 这样子来一步一步执行代码