学习JS runtime environment,对后续了解callba,promise的底层运行原理有帮助。 event Loop也是JS运行环境(JS runtime environment)的一部分,JS运行环境共包含四部分:
1.JS引擎
Chrome V8就是我们常见的JavaScript引擎,JS引擎包含内存堆(Memory Heap)和调用栈(Call Stack)
当你声明一个变量或者函数时,内存会被分配到堆中。当你运行代码时,函数会被压栈(push)到call stack中,当函数返回(return)时,函数又会被弹出(pop)call stack,就像常见栈数据结构的先入后出(last in)过程一样。
2.Web APIs
timeout,promise,XHR,request这些都是web API。要注意的是这些api并不是在javascript中实现(implement)的,他们是由浏览器提供的特性,javascript被授权使用这些特性。
3.Callback queue/Task queue
JS运行环境的第三个组成部分是Callback queue也可以叫Task queue或者message queue(消息队列)。顾名思义,它是队列的数据结构,是先进先出(first in first out)的。
4.Event Loop
第四部分,也是我们的讨论重点就是event loop。Event Loop只有一个任务:检查call stack是否是空的,如果发现是空的,就从消息队列(callback queue)推送(push)一个任务(item)进call stack。