彻底弄懂 JavaScript 执行机制

彻底弄懂 JavaScript 执行机制

JavaScript 的执行环境

JavaScript 代码的执行必须依赖一个执行环境,该执行环境可以是浏览器、 Node.js 服务器或其它解释器等等,而这些执行环境会为 JavaScript 提供几乎相同的对象和方法,但是在细节上或许会略有不同。

JavaScript 的执行过程

JavaScript 的执行过程可以被概括为以下三个步骤:

  1. 代码会在进入执行上下文时被编译。
  2. 编译完成后,会创建一个“执行上下文”(Execution Context)。
  3. 执行 JavaScript 代码

JavaScript 的执行上下文

执行上下文是 JavaScript 运行时环境中的一个抽象概念,用来在代码执行过程中管理代码执行过程中所需要的所有信息,包括当前上下文中的变量、对象和代码等。每进入一个新的函数或块级作用域,都会创建一个新的执行上下文,随着代码的执行,这些执行上下文也会被销毁。

执行上下文包含哪些信息?

执行上下文包含了三个重要的属性:

  1. 变量对象(Variable Object)
  2. 作用域链(Scope Chain)
  3. this 指向

变量对象(Variable Object)

变量对象是每一个执行上下文都会对应一个变量对象,其中包含了当前上下文中所定义的所有变量、函数和函数的参数。其中,函数和函数的参数在执行上下文创建时就已经确定,而变量则在代码执行过程中按需创建。

作用域链(Scope Chain)

在 JavaScript 中,每进入一个新的函数或块级作用域,都会创建一个新的执行上下文。而这些执行上下文是在创建时被封装在互相嵌套的作用域中。这些嵌套的关系就形成了作用域链,函数或变量的查找就按照这个作用域链进行。

this 指向

this 指向在 JavaScript 中非常重要,它的值取决于函数的调用方式。在函数被调用时,this 的值总是指向当前正在执行的函数。

示例说明

以下是两个 JavaScript 执行机制的示例:

例子 1

console.log(a);
var a = 1;

在上述代码中,变量 a 并没有被初始化,因此当在第一行中输出变量 a 时,其值为 undefined。当控制流程执行到第二行时,执行器会创建一个新的执行上下文,并将变量对象初始化为:

{
  a: undefined
}

再将变量 a 的值赋为 1,此时变量对象变为:

{
  a: 1
}

例子 2

function foo() {
  console.log(a);
  var a = 1;
}
foo();

在上述代码中,调用函数 foo 时,会创建一个新的执行上下文,并将变量对象初始化为:

{
  arguments: {},
  this: window,
  a: undefined
}

当控制流程执行到函数内的第二行时,变量 a 的值依然为 undefined,因此在第一行中输出变量 a 时,输出结果为 undefined。之后,再将变量 a 的值赋为 1,完成代码执行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:彻底弄懂 JavaScript 执行机制 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • 前端HTTP发POST请求携带参数与后端接口接收参数的实现

    下面是详细讲解“前端HTTP发POST请求携带参数与后端接口接收参数的实现”的完整攻略。 一、前端HTTP发POST请求携带参数的实现 1. 使用XMLHttpRequest XMLHttpRequest是前端与服务器进行数据交互最常用的方式。要发送带有参数的POST请求,需要设置请求头和请求体。请求体是以字符串形式发送给服务器的,一般将参数转换成JSON或…

    JavaScript 2023年5月19日
    00
  • 几个比较实用的JavaScript 测试及效验工具

    接下来我将向你介绍几个比较实用的 JavaScript 测试及效验工具,包括单元测试工具 Jest、代码质量工具 ESLint、以及文档生成工具 JSDoc,并且会附上相应的示例说明。 Jest:JavaScript 测试框架 Jest 是由 Facebook 开发推出的一款 JavaScript 测试框架,它可以用于执行单元测试、集成测试和端到端测试,可以…

    JavaScript 2023年5月27日
    00
  • js正则表达式之exec方法讲解

    下面是关于“js正则表达式之exec方法讲解”的完整攻略。 exec方法介绍 正则表达式是一个非常重要的知识点,使用正则表达式可以进行文本匹配和替换,exec() 是Regexp对象的一个方法,用于在字符串中执行正则表达式的搜索,并返回包含结果的数组。如果没有找到匹配,它将返回 null。 该方法的语法如下所示: regexp.exec(str) 其中 re…

    JavaScript 2023年6月10日
    00
  • JS选取DOM元素常见操作方法实例分析

    针对“JS选取DOM元素常见操作方法实例分析”的攻略,我会给出完整的文本,涵盖标题、代码块等规范要求,并且会提供两个示例。 JS选取DOM元素常见操作方法实例分析 在前端开发中,JS能够操作DOM元素是非常重要的技能之一。在进行DOM操作时,首先需要选取相应的DOM元素。JS有多种方法可以选取DOM元素。接下来,我们将介绍一些常用的DOM选取方法。 通过id…

    JavaScript 2023年6月10日
    00
  • javascript asp教程第六课– response方法

    下面是详细讲解“javascript asp教程第六课– response方法”的完整攻略: 一、什么是response对象? 在 ASP 中,response 对象代表向客户端发送输出时使用的方法和属性。它允许 ASP 页面向客户端浏览器发送文本、HTML、XML 或任何其他类型的数据。下面是response对象的一些常用方法: Write(strTex…

    JavaScript 2023年5月28日
    00
  • 将string解析为json的几种方式小结

    让我们详细讲解一下如何将字符串解析为JSON的几种方式。 使用JSON库解析字符串 目前市面上有很多种JSON库可供选择,比如jsoncpp、rapidjson等。我们以jsoncpp为例进行讲解。 步骤一:引入头文件 #include <json/json.h> 步骤二:将字符串解析为JSON格式 std::string str = &quot…

    JavaScript 2023年5月27日
    00
  • javascript实现仿银行密码输入框效果的代码

    要实现仿银行密码输入框效果的代码,可以参考如下的攻略: 1. HTML代码 首先,在HTML中需要创建一个文本框,该文本框用于输入密码。为了保证输入的密码的安全性,我们需要将该文本框的type属性设置为password,例如: <input type="password" id="password" /> …

    JavaScript 2023年6月11日
    00
  • javascript 防止刷新,后退,关闭

    防止刷新、后退和关闭网页通常可以使用 JavaScript 实现。以下是标准的 Markdown 格式文本回答。 防止刷新、后退和关闭网页的方法 防止刷新网页 要防止刷新网页,最简单的方法是使用 beforeunload 事件。在页面加载时,添加以下代码: window.addEventListener(‘beforeunload’, function(ev…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部