事件循环是许多开发人员困惑的根源,但它是 JavaScript 引擎的基础部分。它允许 JavaScript 是单线程的,但能够以非阻塞方式执行。要理解事件循环,我们首先需要解释一些关于 JavaScript 引擎的东西,例如调用堆栈、任务、微任务及其各自的队列。让我们一一分解。
调用堆栈是一种跟踪 JavaScript 代码执行的数据结构。顾名思义,它是一个堆栈,因此是内存中的 LIFO(后进先出)数据结构。执行的每个函数都表示为调用堆栈中的一个框架,并放置在前一个函数的顶部。
让我们看一个简单的例子,一步一步来:
- function foo() {
- console.log('foo');
- bar();
- }
-
- function bar() {
- console.log('bar');
- }