异步
所谓的异步代码其实就是非现在运行的代码,或者说在将来某个时刻会执行的代码;在JavaScript中,有一部分代码是会在主线程(JavaScript是单线程的,只有主线程)运行时就运行的代码(现在运行的代码),而另外一部分则放到事件循环队列中运行的代码,而这部分代码就是异步代码;而异步代码永远会在现在运行的代码运行之后才有可能被执行。
注意:异步也是单线程的,区别只是在单线程上的执行时时间的早晚差异
事件循环队列
这个是异步实现的基础,对于其模型,可以想像一下,有一个管口向下的长长的输送管子,里面依次地紧挨着地排了许多的货物,每次运送时,管子口的那个货物就会被输出,直到管子没有货物,而当又有货物从管子上口装入时,就又有货物输出。这个可以类比我们的事件循环队列,上面例子的管子就是我们的事件循环队列,而里面的货物就是一个个回调事件函数,而每次运送就是事件循环队列的每次tick,每次运送时就有一个货物被输出,就是对应了每次tick都有一个回调事件函数被调用执行;也就是说这个事件循环队列会永无休止地检测队列里有没有回调函数,有的话就执行,但一定是一个一个来的,不能插队。用伪代码表示这个事件循环队列:
// 事件循环队列
let loop_queue