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

JavaScript 的工作原理:了解执行上下文(针对初学者的简化版)

Dec 06, 2024 pm 09:14 PM

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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

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

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1655
14
CakePHP 教程
1413
52
Laravel 教程
1306
25
PHP教程
1252
29
C# 教程
1226
24
前端热敏纸小票打印遇到乱码问题怎么办? 前端热敏纸小票打印遇到乱码问题怎么办? Apr 04, 2025 pm 02:42 PM

前端热敏纸小票打印的常见问题与解决方案在前端开发中,小票打印是一个常见的需求。然而,很多开发者在实...

神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

谁得到更多的Python或JavaScript? 谁得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript开发者的薪资没有绝对的高低,具体取决于技能和行业需求。1.Python在数据科学和机器学习领域可能薪资更高。2.JavaScript在前端和全栈开发中需求大,薪资也可观。3.影响因素包括经验、地理位置、公司规模和特定技能。

如何实现视差滚动和元素动画效果,像资生堂官网那样?
或者:
怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? 如何实现视差滚动和元素动画效果,像资生堂官网那样? 或者: 怎样才能像资生堂官网一样,实现页面滚动伴随的动画效果? Apr 04, 2025 pm 05:36 PM

实现视差滚动和元素动画效果的探讨本文将探讨如何实现类似资生堂官网(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? 如何使用JavaScript将具有相同ID的数组元素合并到一个对象中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中将具有相同ID的数组元素合并到一个对象中?在处理数据时,我们常常会遇到需要将具有相同ID�...

JavaScript引擎:比较实施 JavaScript引擎:比较实施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

前端开发中如何实现类似 VSCode 的面板拖拽调整功能? 前端开发中如何实现类似 VSCode 的面板拖拽调整功能? Apr 04, 2025 pm 02:06 PM

探索前端中类似VSCode的面板拖拽调整功能的实现在前端开发中,如何实现类似于VSCode...

See all articles