记录&转载 前端知识文章

记录&转载 前端知识文章
最新回答
想挽无人

2026-10-28 00:57:29

记录与转载:前端知识文章——JavaScript 执行机制、Event Loop 与 setTimeout

一、JavaScript 执行机制

JavaScript 是一种单线程脚本语言,这意味着它一次只能执行一个任务。为了应对这种单线程带来的问题(如长时间运行的任务会阻塞后续任务的执行),JavaScript 采用了事件驱动和异步事件处理机制,即 Event Loop(事件循环)。

JavaScript 的执行机制可以概括为以下几个步骤:

  • 创建执行上下文:当 JavaScript 代码执行时,会创建一个全局执行上下文(在浏览器中是 window 对象)。函数被调用时,会创建一个新的函数执行上下文,并成为当前执行上下文。
  • 执行栈(Call Stack):JavaScript 引擎通过执行栈来管理执行上下文。当函数调用时,新的执行上下文被推入栈中,当函数执行完毕,执行上下文从栈中弹出。
  • 代码执行:JavaScript 引擎会按照顺序执行栈中的执行上下文,直到栈为空。

二、Event Loop

Event Loop 是 JavaScript 异步编程的核心机制。它允许 JavaScript 引擎在等待某些异步操作(如网络请求、文件读取等)完成时,不阻塞后续代码的执行。

Event Loop 的工作原理如下:

  • 同步代码执行:JavaScript 引擎首先执行栈中的同步代码。
  • 异步任务处理:当遇到异步任务(如 setTimeout、Promise、Ajax 请求等)时,JavaScript 引擎会将任务交给相应的异步处理机制(如 Timer、Promise 队列、微任务队列等)。
  • 事件循环:当栈为空时,Event Loop 会检查异步任务队列。如果队列中有任务,JavaScript 引擎会将任务推入栈中执行。这个过程会不断重复,形成事件循环。

三、setTimeout

setTimeout 是 JavaScript 中常用的定时器函数,用于在指定的时间后执行一段代码。

setTimeout 的工作原理如下:

  • 设置定时器:当调用 setTimeout 函数时,JavaScript 引擎会将定时器任务交给 Timer 异步处理机制。
  • 等待时间:Timer 会等待指定的时间(以毫秒为单位)。
  • 任务入队:当时间到达后,Timer 会将定时器任务添加到任务队列中。
  • 任务执行:当执行栈为空时,Event Loop 会将任务队列中的任务推入栈中执行。

需要注意的是,setTimeout 的执行时间并不是精确的。由于 JavaScript 是单线程的,如果执行栈中有长时间运行的任务,setTimeout 的回调函数可能会被延迟执行。

参考文章:

  • 这一次,彻底弄懂 JavaScript 执行机制
    :本文详细讲解了 JavaScript 的执行机制、Event Loop 以及 setTimeout 的工作原理,对于深入理解 JavaScript 异步编程非常有帮助。

转载说明:

本文内容基于开源项目 stephentian/33-js-concepts 中的相关知识点进行整理与记录,并参考了 AlloyTeam 团队的博客文章。转载本文时,请尊重原作者的知识产权,注明原文出处及作者信息。