搜索
首页web前端js教程JavaScript 的工作原理:了解执行上下文(针对初学者的简化版)

How JavaScript Works: Understanding Execution Context (Simplified for Beginners)

JavaScript 是世界上最流行的编程语言之一。但它在幕后是如何工作的呢?让我们使用简单的概念和伪代码逐步分解它,以便任何初学者都能理解。


什么是 JavaScript?

JavaScript 是一种在浏览器(如 Chrome、Firefox 或 Safari)或服务器上(使用 Node.js 等工具)运行的编程语言。它用于使网站具有交互性。当您在浏览器中看到动画、按钮或游戏时,JavaScript 正在发挥作用。

要了解 JavaScript 的工作原理,我们需要了解两件事:

  1. 执行上下文
  2. 调用堆栈

什么是执行上下文?

执行上下文就像一个盒子,JavaScript 保存运行代码所需的一切。这包括:

  1. 变量(您存储的数据,例如 x = 5)
  2. 函数(执行某些操作的代码片段,例如 showMessage())
  3. 要执行的代码(您编写的实际指令)

执行上下文主要有两种类型:

  1. 全局执行上下文(GEC):这是 JavaScript 开始运行代码的默认框。就像主舞台一样。
  2. 函数执行上下文(FEC):这是每当调用函数时创建的新框。它仅适用于该功能。

分步示例

想象一下你写了这个简单的伪代码:

// Global Code
var name = "Alex";
function greet() {
    var message = "Hello, " + name;
    return message;
}
greet();

以下是 JavaScript 的逐步执行过程:


1.创建全局执行上下文

程序启动时,JavaScript 会自动创建一个全局执行上下文(GEC)

  • 内存(可变环境):

    • name = undefined(暂时占位符)
    • greet = 函数定义(存储greet()的代码)
  • 代码执行阶段:

    • 它逐行运行全局代码:
    • var name = "亚历克斯"; → 更新内存:name =“Alex”
    • 遇到greet(); → 调用greet函数。

2.创建函数执行上下文

当调用greet()时,JavaScript会专门为greet创建一个新的函数执行上下文(FEC)

  • 内存(可变环境):

    • message = undefined(greet 中变量的占位符)
  • 代码执行阶段:

    • 运行问候函数:
    • var message =“你好,”名字; → 将“Hello,”与姓名(“Alex”)组合,因此消息 =“Hello, Alex”。
    • 返回消息; → 回复“你好,亚历克斯”。

3.清理并返回

greet 函数完成后,其 函数执行上下文 就会被移除(删除)。程序返回到全局执行上下文


执行上下文会发生什么?

JavaScript 使用调用堆栈来跟踪所有这些执行上下文。

什么是调用堆栈?

调用堆栈就像一堆盘子:

  1. 全局执行上下文位于底部(第一块板)。
  2. 每次调用函数时,都会在顶部添加一个函数执行上下文(一个新板)。
  3. 函数完成后,其上下文将被删除(板被取下)。

用伪代码可视化

以下是 JavaScript 处理我们代码的方式:

  1. 初始全局代码(创建 GEC):

    // Global Code
    var name = "Alex";
    function greet() {
        var message = "Hello, " + name;
        return message;
    }
    greet();
    
  2. 全局执行更新(运行代码):

    GEC:
      Memory: { name: undefined, greet: function }
      Code: Execute global lines
    
  3. 调用greet()(创建FEC):

    GEC:
      Memory: { name: "Alex", greet: function }
      Code: Encounters greet()
    
  4. 运行greet()并返回:

    Call Stack:
      1. GEC
      2. FEC for greet()
    FEC (greet):
      Memory: { message: undefined }
      Code: Execute function lines
    
  5. 完成执行:

    FEC (greet):
      Memory: { message: "Hello, Alex" }
      Return value: "Hello, Alex"
    Call Stack after return:
      1. GEC
    

要记住的关键事项

  1. 执行上下文就像 JavaScript 运行代码的容器。每个程序都以全局执行上下文开始,每个函数都有自己的函数执行上下文
  2. 调用堆栈跟踪正在运行的内容。最后添加的内容是第一个删除的内容(LIFO:后进先出)。
  3. 当函数完成时,JavaScript 会进行清理。这就是为什么函数的内存不会永远保留的原因。

为什么这很重要?

理解执行上下文可以帮助您编写更好的程序:

  • 您将知道为什么变量在某些地方可用而在其他地方(范围)不可用。
  • 您将理解诸如“未定义”变量之类的错误。
  • 您将了解函数如何交互以及它们返回值的原因。

挑战自己

尝试在脑海中运行这个伪代码:

Call Stack:
  Empty (Program Ends)

问自己:

  1. 全局执行上下文中有什么?
  2. 调用multiply() 时会发生什么?
  3. 结果的最终值是多少?

通过掌握执行上下文,您将为解决最棘手的 JavaScript 问题奠定坚实的基础!

以上是JavaScript 的工作原理:了解执行上下文(针对初学者的简化版)的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
在JavaScript中替换字符串字符在JavaScript中替换字符串字符Mar 11, 2025 am 12:07 AM

JavaScript字符串替换方法详解及常见问题解答 本文将探讨两种在JavaScript中替换字符串字符的方法:在JavaScript代码内部替换和在网页HTML内部替换。 在JavaScript代码内部替换字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 该方法仅替换第一个匹配项。要替换所有匹配项,需使用正则表达式并添加全局标志g: str = str.replace(/fi

构建您自己的Ajax Web应用程序构建您自己的Ajax Web应用程序Mar 09, 2025 am 12:11 AM

因此,在这里,您准备好了解所有称为Ajax的东西。但是,到底是什么? AJAX一词是指用于创建动态,交互式Web内容的一系列宽松的技术。 Ajax一词,最初由Jesse J创造

如何创建和发布自己的JavaScript库?如何创建和发布自己的JavaScript库?Mar 18, 2025 pm 03:12 PM

文章讨论了创建,发布和维护JavaScript库,专注于计划,开发,测试,文档和促销策略。

如何在浏览器中优化JavaScript代码以进行性能?如何在浏览器中优化JavaScript代码以进行性能?Mar 18, 2025 pm 03:14 PM

本文讨论了在浏览器中优化JavaScript性能的策略,重点是减少执行时间并最大程度地减少对页面负载速度的影响。

如何使用浏览器开发人员工具有效调试JavaScript代码?如何使用浏览器开发人员工具有效调试JavaScript代码?Mar 18, 2025 pm 03:16 PM

本文讨论了使用浏览器开发人员工具的有效JavaScript调试,专注于设置断点,使用控制台和分析性能。

如何构建简单的jQuery滑块如何构建简单的jQuery滑块Mar 11, 2025 am 12:19 AM

本文将引导您使用jQuery库创建一个简单的图片轮播。我们将使用bxSlider库,它基于jQuery构建,并提供许多配置选项来设置轮播。 如今,图片轮播已成为网站必备功能——一图胜千言! 决定使用图片轮播后,下一个问题是如何创建它。首先,您需要收集高质量、高分辨率的图片。 接下来,您需要使用HTML和一些JavaScript代码来创建图片轮播。网络上有很多库可以帮助您以不同的方式创建轮播。我们将使用开源的bxSlider库。 bxSlider库支持响应式设计,因此使用此库构建的轮播可以适应任何

jQuery矩阵效果jQuery矩阵效果Mar 10, 2025 am 12:52 AM

将矩阵电影特效带入你的网页!这是一个基于著名电影《黑客帝国》的酷炫jQuery插件。该插件模拟了电影中经典的绿色字符特效,只需选择一张图片,插件就会将其转换为充满数字字符的矩阵风格画面。快来试试吧,非常有趣! 工作原理 插件将图片加载到画布上,读取像素和颜色值: data = ctx.getImageData(x, y, settings.grainSize, settings.grainSize).data 插件巧妙地读取图片的矩形区域,并利用jQuery计算每个区域的平均颜色。然后,使用

如何使用源地图调试缩小JavaScript代码?如何使用源地图调试缩小JavaScript代码?Mar 18, 2025 pm 03:17 PM

本文说明了如何使用源地图通过将其映射回原始代码来调试JAVASCRIPT。它讨论了启用源地图,设置断点以及使用Chrome DevTools和WebPack之类的工具。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。