JS 到底是在干嘛:一文搞懂JS 执行上下文

本文深入探讨JavaScript代码在浏览器中的执行过程,包括执行上下文的创建与执行阶段,全局执行上下文和函数执行上下文的区别,以及'this'关键字的设置。通过理解这些概念,开发者能更好地掌握JavaScript的运行机制,编写出更高效、可维护的代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有JavaScript代码都需要在某种环境中托管和运行。在大多数情况下,这种环境是一个web浏览器。

对于在web浏览器中执行的任何一段JavaScript代码,很多过程都发生在后台。在本文中,我们将看一看JavaScript代码在web浏览器中运行的幕后发生了什么。

在开始之前,你需要先熟悉一些概念,因为我们将在本文中经常用到它们:

  • 解析器: 语法解析器是一个逐行读取代码的程序。它理解代码如何符合编程语言定义的语法,以及代码应该做什么。

  • JavaScript引擎: JavaScript引擎是一个简单的计算机程序,它接收JavaScript源代码并将其编译成CPU可以理解的二进制指令(机器码)。JavaScript引擎通常是由web浏览器供应商开发的,每个主要浏览器都有一个。例如谷歌chrome的V8引擎,Firefox的SpiderMonkey和Internet Explorer的Chakra。

  • 函数声明:函数被赋予一个名称:

    function doSomething() { //“doSomething” 是这个函数的名字
    //statements;
    }

  • **函数表达式:**匿名函数,即没有函数名的函数,如:function () {statements}。它们通常在语句中使用,比如将函数赋值给变量:

    let someValue = function(){
    //statements
    }

现在,我们已经知道了这些概念,让我们开始吧。

JavaScript代码是如何执行的

浏览器并不能理解我们在应用程序中编写的高级JavaScript代码。它需要转换成一种浏览器和计算机都能理解的格式——机器代码

当通过HTML读取时,如果浏览器遇到要通过<script>标签或包含类似onClick的JS代码的属性运行的JS代码,它会将其发送给它的JS引擎。

然后,浏览器的JS引擎创建一个特殊的环境来处理这段JS代码的转换和执行。这个环境称为执行上下文。

执行上下文包含当前正在运行的代码,以及帮助其执行的所有内容。

在执行上下文运行时,解析器解析存储在内存中的特定的代码、变量和函数,生成可执行的字节码,并执行代码

JavaScript中有两种执行上下文:

  • 全局执行上下文(GEC)
  • 函数执行上下文(FEC)

接下来,让我们详细地看看这两种上下文。

全局执行上下文(GEC)

当JavaScript引擎接收到一个脚本文件时,它首先创建一个默认的执行上下文,即全局执行上下文(GEC)。

GEC基本的/默认的执行上下文,所有不在函数内的JavaScript代码都在这里执行。

注:对于每个JavaScript文件,只能有一个GEC。

函数执行上下文(FEC)

无论何时调用函数,JavaScript引擎都会在GEC中创建一种不同类型的执行上下文,称为函数执行上下文(function Execution Context, FEC),以计算和执行该函数中的代码。

由于每个函数调用都有自己的FEC,所以在脚本的运行时可以有多个FEC。

执行上下文是如何被创建的

前面我们知道了什么是执行上下文,现在让我们看看执行上下文是如何被创建的。

执行上下文(GEC或FEC)的创建分为两个阶段:

  1. 创建阶段

  2. 执行阶段

创建阶段

在创建阶段,执行上下文首先与执行上下文对象(ECO)相关联。执行上下文对象存储了许多重要数据,执行上下文中的代码在运行时使用这些数据。

创建阶段又可以分为3个阶段,在这3个阶段中定义和设置执行上下文对象的属性。这些阶段是:

  1. 创建变量对象(VO)
  2. 创建作用域链
  3. 为变量赋值

</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值