理解 EventLoop

链接

 链接

 node 浏览器 执行顺序有差异

macrotask microtask

一个线程会有 堆 栈 消息队列;  栈函数执行是用的, 堆用了存放定义的对象, 消息队列来处理异步的操作

a()

setTimeout( b, 0);

setImeout( c, 0 );

console.log(2);

这里会形成一个主线程, 一个消息队列, 队列包含b这个函数, 要等主线程 a  console.log(2) 执行完才会去执行消息队列b 

 执行a 和 console.log(2) 形成栈, 执行完后, 栈清空,

 然后再去消息队列拿一个消息b, 如果b调用了其他函数, 会生成两个栈 ,    执行完b后,  在执行c, 

这样循环就形成了 eventLoop

主线程就是js引擎, 消息队列一般是浏览器提供的,  js引擎发现有异步 或者 事件先放在消息队列中,  

如果浏览器中的队列已经完成(比如ajax有结果后, 或者定时器到了20s后 ), 就会通知js引擎去处理这个结果, 或者 回调函数

原文地址:https://www.cnblogs.com/dhsz/p/6699310.html