JavaScript 内部机制:理解核心原理 ✨

JavaScript 是一种不可思议的语言,我们每天都在使用它,却并不了解其背后发生了什么。让我们深入探讨 JavaScript 的工作原理,揭开其面纱。

基础:单线程执行

在核心层面,JavaScript 是一种单线程同步语言,这意味着它一次处理一个任务,在一个线程中执行。

尽管 JavaScript 是单线程的,但它具有异步能力,使其看起来像是多线程

JavaScript 运行时解剖:

每个 JavaScript 运行时都包含三个关键组件,它们协同工作:

1- 调用栈:

  • 一种数据结构,用于跟踪正在执行的函数。它遵循后进先出(LIFO)的原则------最后添加的函数先被移除。
  • 栈底是全局执行上下文,即全局代码的环境,随着函数被调用,它们的执行上下文被堆叠在顶部。

2- 内存堆:

  • 在程序执行期间,用于存储对象、数组和其他复杂数据结构。
  • JavaScript 使用垃圾回收来释放对象所占用的内存。

3- 执行上下文:

  • 执行上下文是一种特殊环境,用于处理 JavaScript 代码的执行。
  • JavaScript 有一个全局执行上下文,以及每个被调用函数的函数执行上下文

执行上下文的阶段:

1- 内存创建阶段:

  • 创建全局对象(在浏览器中是window,在 Node.js 中是global)。
  • this关键字绑定到全局对象。
  • 创建变量并声明:
    • 对于var声明:分配内存并初始化为undefined(变量提升)
    • 对于letconst声明:分配内存但保持在临时死区(未初始化)

2- 执行阶段:

  • 逐行执行代码。
  • 为变量分配实际值。
  • 为函数调用创建新的执行上下文。

异步 JavaScript:事件循环和队列

JavaScript 的异步性通过以下机制实现:

任务队列(宏任务队列)

  • 一个先进先出(FIFO)的队列,用于存放已准备好执行的回调。

微任务队列

  • 一个优先级更高的队列,用于promise和其需要在下一个任务之前处理的微任务。

事件循环

  • 事件循环是 JavaScript 中异步编程的基础:
  • 它持续检查调用栈是否为空。
  • 如果调用栈为空,它会先查看微任务队列。
  • 处理完微任务后,它会检查任务队列。
  • 它会将队列中的第一个回调取出并推入调用栈。

结论

理解 JavaScript 的内部工作原理有助于你编写更高效的代码。从其单线程特性到事件循环和执行上下文,这些基本概念构成了 JavaScript 行为的骨干。

掌握这些概念后,你将更深入地了解 JavaScript 代码的实际执行过程。

快乐编码 😊

原文:dev.to/alaa-samy/j...

相关推荐
0思必得04 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5164 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino4 小时前
图片、文件的预览
前端·javascript
layman05286 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔6 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李6 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN6 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒6 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库6 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_180079052476 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫