事件环的概念
对于类似我们这种非计算机或者软件专业毕业的野路子,当第一次接触事件环这个概念其实是懵比的,具体是个啥呢,
我的理解是:
在JS的执行栈中,同步任务进入主执行栈(也可以说主线程),
而异步任务进入任务队列(TaskQueue)等待执行,任务队列可以理解成
一个消息队列,I/O设备完成一件事,就向任务队列添加一个事件,
一旦主执行栈中所有的同步任务执行完毕,就会读取任务队列中等待的任务,
并放入执行栈开始执行,其实就是执行异步任务的回调函数,
所以说异步任务必须指定回调函数,主线程会不断的循环这个动作,
所以这种运行机制又称为EventLoop(事件循环)
复制代码
借鉴其他的理解
( 这里解释一下什么叫‘任务队列’:这是一个先进先出的数据结构,排在前面的事件会优先被主线程读取,但是当有定时器的时候主线程会先检查一下执行时间。)我们画一张图来理解这个:
从这张图中我们可以看到其中有宏任务(MacroTask)和微任务(MicroTask)之分,我们来说下这个宏任务与微任务。宏任务包括:
- setImmediate
- setTimeout
- setInterval
微任务包括:
- process.nextTick
- Promise
- MutaionObserver
总结
事件环其实是一个抽象的一个概念,仁者见仁吧,想更好的理解它可以先从队列,栈,宏任务,微任务入手去了解,纯理论的东西更多还是靠个人理解,多写代码体会下代码的执行顺序。 欢迎大家相互交流,随手记录下最近所学所想。