JavaScript运行机制

词法环境
每个执行上下文都有一个相关联的词法环境(简称环境)。
词法环境的定义:用于定义出现在上下文中的标识符与其值之间的关联的结构。从技术上讲,环境是由环境记录(Enviroment Record)(一个将标识符映射到值的实际存储表)以及对其外层环境的引用(可能为 null)组成的。
简而言之:环境是一种存储标识符到变量映射的结构。(这里,标识符指变量或者函数的名称,变量是对实际对象(包括函数对象和数组对象)的引用或者基础类型值)。

变量环境
变量环境也是一种词法环境,其环境记录保存该执行上下文内由VariableStatements(即 var 声明语句) 创建的绑定。
既然变量环境也是词法环境,因此它有词法环境的所有属性和组件。
在 ES6 中,词法环境组件与变量环境组件之间的一个区别是:
前者用于存储函数声明以及用 let 和 const 声明的变量绑定
后者只用于存储用 var 声明的变量绑定。

案例

let a = 20;
const b = 30;
var c;
function multiply(e, f) {
  var g = 20;
  return e * f * g;
}
c = multiply(20, 30);

运行描述:

当代码运行时,JavaScript 引擎首先创建一个全局执行上下文来执行全局代码。

执行阶段,变量赋值完成。

当遇到调用函数 multiply(20, 30) 时,就创建一个新的函数执行上下文来执行该函数代码。

之后,该执行上下文进入执行阶段,该函数内的变量赋值已经完成。

该函数执行完成后,返回值被存储在 c 中。于是,全局词法环境就被更新了。之后,全局代码完成执行,程序结束。

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值