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的队列中

 

他们的优先级为  函数栈  >  微任务  >   宏任务 

也就是说 碰到 函数栈先执行函数栈  全部执行完了 函数栈问问 微任务 还有没有活 微任务做完了 问问宏任务 还有没有活 这样子来一步一步执行代码

 

posted @ 2019-04-24 22:32  一碗不捞鱼  阅读(136)  评论(0编辑  收藏  举报