JavaScript 的运行机制:
EventLoop:
至于哪些是宏操作哪些是微操作:
- macro-task(宏任务):包括整体代码script,setTimeout,setInterval, setImmediate(node环境下)。
- micro-task(微任务):Promise,process.nextTick
也就是说,从代码开始执行,就先创建一个宏操作,相当于是对代码的整体编译,然后每遇到一个宏操作或者微操作,都会将其放到对应的位置去,比如宏操作会放到主执行栈, 微操作会放到Event Queue 中.然后当代码”编译”执行完,也就是主执行栈执行完成,这个时候就会去执行 Event Queue, 也就是刚刚代码中的 Promise 或者 process.nextTick. 例如这段代码
1 | console.log('script start'); |
如果一开始不熟练的话可以画出两个队列,分别把要执行的程序排进去