关于执行上下文的学习总结

2023-11-14

学习总结自:https://juejin.cn/post/6844904145372053511#heading-1

执行上下文(Execution Context)
  • 全局执行上下文
  • 函数执行上下文
  • eval执行上下文

每个执行上下文会创建:词法环境(LexicalEnvironment)和变量环境(VariableEnvironment);
词法环境内重点关注的是:环境记录(EnvironmentRecord)和外层引用(outer);

执行栈

用来管理执行JS代码期间创建的所有执行上下文的数据结构,一个LIFO(后进先出)的栈

示例

js代码:

let a = 10;
const b = 20;
var sum;

function add(e, f){
    var d = 40;
    return d + e + f 
}

let utils = {
    add
}

sum = utils.add(a, b)

对应的执行上下文伪代码:

GlobalExecutionContext = {                        // 全局执行上下文
    LexicalEnvironment: {                         // 词法环境
        EnvironmentRecord: {                      // 环境记录
            type: 'object',
            this: <globalObject>,                 // this指向全局对象
            add: <function>,
            a: <uninitialized>,
            b: <uninitialized>,
            utils: <uninitialized>
        },
        outer: null
    },
    VariableEnvironment: {                        // 变量环境
        EnvironmentRecord: {
            type: 'object',
            this: <globalObject>
            sum: undefined                        // var变量存在变量环境的环境记录里,与let、const不同(变量提升不报错的原因)
        },
        outer: null
    },
}

// 当运行到函数add时才会创建函数执行上下文
FunctionExecutionContext = {
    LexicalEnvironment: {
        EnvironmentRecord: {
            type: 'declarative',
            this: <utils>,                                 // this指向函数的引用utils对象
            arguments: {0: 10, 1: 20, length: 2},          // 函数执行上下文的环境记录有arguments
            [[NewTarget]]: undefined,
            e: 10,
            f: 20,
            ...
        },
        outer: <GlobalLexicalEnvironment>                  // 外层引用指向父级的执行上下文的词法环境,变量环境的outer也是一样
    },
    VariableEnvironment: {
        EnvironmentRecord: {
            type: 'declarative',
            this: <utils>
            d: undefined,
        },
        outer: <GlobalLexicalEnvironment>
    },
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于执行上下文的学习总结 的相关文章

  • 主干关系事件未触发?

    class TheModel extends Backbone RelationalModel relations type Backbone HasMany key subModels relatedModel SubModel coll
  • 何时不使用承诺[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在阅读了数十篇关于 es6 Promise 有多伟大以及为什么我们应该实现它们的文章之后 我有这样的感觉 ALL我的 不平凡的 JavaScri
  • 创建 Cookie 时需要帮助

    我有一个名为yes和另一个名叫no
  • ElectronJS ReferenceError:导航器未定义

    我正在尝试在电子上制作自定义标题栏 但是当我启动我的应用程序时 我遇到了 ReferenceError 导航器未定义 问题 请帮忙 这是我的 main js 中的代码片段 My Codes https i stack imgur com c
  • 使react-leaflet能够离线使用

    我一直在使用反应传单 https github com PaulLeCam react leaflet图书馆 到目前为止运作良好 现在我希望网站预加载尽可能多的图块 以便网络应用程序 也是 PWA 可以在没有互联网的情况下使用 我找到了一些
  • Aptana Studio 3 上的预览选项卡在哪里?

    我在 Windows PC 上使用 Aptana Studio 2 并有一个选项卡用于在 IE 上预览页面 另一个选项卡用于在 Firefox 上预览 但我切换到了 Aptana 3 我不知道是没有预览还是我没有找到它 是的 我在 stac
  • 访问 TypeScript 数组的最后一个元素

    TypeScript 中有访问数组最后一个元素的符号吗 在 Ruby 中我可以说 array 1 有类似的东西吗 您可以通过索引访问数组元素 数组中最后一个元素的索引将是数组的长度 1 因为索引是从零开始的 这应该有效 var items
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • 使水平滚动条始终可见,即使底部不在视图中

    我将用一个片段来开始这个问题 该片段几乎显示了我想要完成的任务 wrapper overflow hidden display flex sidebar min width 200px background 333 color FFF co
  • React无限滚动scrollableTarget动态获取id?

    我在我的项目中使用react infinite scroll component 如何让scrollableTarget动态获取item id 我试过这样scrollableTarget item id 但它不起作用 必须与该 div 具有
  • Keycloak javascript 适配器 `keycloak.init` 加载 404 iframe

    我正在尝试使用 javascript 适配器将 Keycloak 集成到我的客户端应用程序keycloak js 但是 我似乎无法让它发挥作用 这是我的代码 const keycloak new Keycloak realm my real
  • 有关于 PHP 中的 V8JS 的文档吗?

    有没有关于V8JS的文档 我是否只需要标准 PHP 或一些扩展即可使用 V8JS 我将非常感谢有关 PHP 中的 V8JS 的任何信息 要求 PHP 5 3 3 和 V8 库和标头安装在正确的路径中 Install http www php
  • Jquery:选择菜单以显示和隐藏某些div元素

    我正在创建一个选择菜单 根据所选选项显示和隐藏某些 div 像这样的东西
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api
  • 需要js、d3 和 nvd3 集成

    我面临整合的问题要求 questions tagged requirejs with d3 questions tagged d3 and nvd3 questions tagged nvd3 我找到了一个使用 require 的简单解决方
  • 您如何看待引导模式触发器的相应回调?

    On 引导模态 http getbootstrap com javascript modals 我们知道我们可以为触发器绑定事件 例如show or hide using show shown hide hidden 但此事件绑定仅适用于一
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • Express.js Passport认证自动失败跳过策略

    UPDATE 我已将代码从护照本地注册内部移至单独的处理程序 并且运行良好 问题在于 Passport 和本地注册的使用 但我不知道为什么 我使用 Node js Express Passport 进行身份验证和注册设置 这是以前使用过的标
  • Bootstrap 3 / 显示模式不适用于 javascript 方式

    我用Modal http getbootstrap com javascript modalsBootstrap 3 0 的功能 我有这个代码 a href myNestedContent Open the modal containing
  • 在 javascript 中使用 xPath 解析具有默认命名空间的 XML

    我需要创建一个 XML xPath 解析器 所有解析都必须在客户端进行 使用 JavaScript 我创建了一个 javascript 来执行此操作 在默认名称空间发挥作用之前 一切看起来都正常 我根本无法查询具有默认命名空间的 XML 我

随机推荐

  • android适配分辨率(hdpi,mdpi,ldpi)及横竖屏

    http jianxiaza blog 163 com blog static 87685628201131471635563 MUST HAVE ROOT ACCESS Open Root Explorer Open System fol
  • 《深入理解Java虚拟机 1》Java内存区域与内存分配策略

    本系列是用来记录 深入理解Java虚拟机 这本书的读书笔记 方便自己查看 也方便大家查阅 欲速则不达 欲达则欲速 第一章 走进Java 一 Java虚拟机发展史 这部分一带而过吧 有兴趣的可以阅读原著 二 Java内存管理 class文件结
  • Linux(CentOS7)下rpm方式安装SNMP服务

    一 准备文件 安装snmp服务需要的rpm包 perl Data Dumper 2 145 3 el7 x86 64 rpm net snmp libs 5 7 2 28 el7 4 1 x86 64 rpm net snmp utils
  • 华为od机考真题-数大雁,1419,数青蛙

    数大雁 https leetcode cn problems minimum number of frogs croaking submissions 怎么确认最少的个数呢 我们找到第一个q和第一个k的下表 在这个范围存在q的数量且q可以在
  • 最全的ASCII码对照表

    十进制代码 十六进制代码 MCS 字符或缩写 DEC 多国字符名 ASCII 控制字符 1 0 0 NUL 空字符 1 1 SOH 标题起始 Ctrl A 2 2 STX 文本起始 Ctrl B 3 3 ETX 文本结束 Ctrl C 4
  • 考研笔记:有关双端队列知识点的探究

    考研笔记 有关双端队列知识点的探究 双端队列是指允许两端都可以进行入队和出队操作的队列 其元素的逻辑结构仍是线性结构 将队列的两端分别称为前端和后端 在双端队列进队时 前端进的元素排在后端进的元素前面 后端进的元素排在前端进的元素的后面 在
  • (四)Loadrunner 代理录制

    1 代理录制主要是为了解决浏览器兼容性问题导致的脚本录制问题 包括录制时浏览器打不开 录制脚本为空 2 代理录制主要步骤为 lr录制选项设置代理 lr录制选择代理的exe 开启浏览器代理 代理的端口号跟loadrunner里设置的代理端口号
  • xp系统怎样安装传真服务器,如何安装windows xp传真服务器

    用XP系统接收传真 1 开始 设置 打印机和传真机 本机必须安装调制解调器 必须有电话线与之连接 2 在空白处单击右键 安装一个本地传真机打印机 如果是第一次安装 则需要选择传真设置 如果本机没有安装传真服务 需要xp的安装盘加载一些文件
  • Oracle的一些常用函数

    SQL中的单记录函数 1 ASCII 返回与指定的字符对应的十进制数 SQL gt select ascii A A ascii a a ascii 0 zero ascii space from dual A A ZERO SPACE 6
  • MySQL~DCL

    三 DCL 1 SQL分类 DDL 操作数据库和表 DML 增删改表中数据 DQL 查询表中数据 DCL 管理用户 授权 DBA 数据库管理员 DCL 管理用户 授权 2 管理用户 2 1 添加用户 语法 CREATE USER 用户名 主
  • [ Z-Stack协议分析(一)] ZMain.c函数

    Z Stack协议分析 一 main函数解析 1 Z stack的简单介绍 Z stack是一个协议栈 是由美国TI公司德州仪器公司设计的 Z Stack协议可在官网下载 我用的还是老版本 ZStack CC2530 2 3 0 1 4 0
  • 网易校园招聘c++题目--如何让new操作符不分配内存,只调用构造函数

    问题 c 中的new操作符 通常完成两个工作 分配内存及调用相应的构造函数 请问 1 如何让new操作符不分配内存 只调用构造函数 2 这样的用法有什么用 解答 要求new显式调用构造函数 但不分配内存 题目要求不能生成内存 还要调用构造函
  • random、range和len函数的使用

    random range和len函数的使用 一 random函数 1 random random 和random Random import random num random random 生成0 1的随机浮点数0 61612881836
  • douyin23.9 deviceid和iid设备注册分析

    使用23 9版本进行注册 版本多少 其实没有那么重要 老生常谈 老规矩注册接口device register不能少吧 然后要检测设备app alert check吧 之后要发app log日志包吧 当然除了只有这些接口肯定是不行啦 加密用到
  • this指针

    this定义 this 是 C 中的一个关键字 也是一个 const 指针 它指向当前对象 通过它可以访问当前对象的所有成员 例如 void Student setname char name this gt name name void
  • 什么是paxos算法

    从前有个村 老村长退休了 需要选一个新的村长 现有俩地痞 张三 和 李四 都想当村长 想当村长 至少需要获得一半以上长老的投票 如今这一届村委会有老李 老孙 老王 三位长老担任 第一天 张三依次拜访老李 老孙 老王三位长老 与他们说 选我一
  • UML类图中类与类之间的关系

    前言 在软件系统中 类不是孤立存在的 类与类之间存在相互关系 因此 需要通过 UML 来描述这些类之间的关系 类之间具有如下几种关系 关联关系 依赖关系 泛化关系 接口与实现关系 关联关系 含义 通常将一个类的对象作为另一个类的属性 表示
  • python matlibplot时如何不显示图片只保存图片

    1 查看网上的博客好像没得到需要的结果 于是查看官方文档 既然跟show有关 我就先查询 plt show 2 在see also中查看到了ioff可以禁用交互模式 而交互模式就是在创建图时就显示出图片 禁用了之后就可以只保存而不显示了 具
  • LVS + DR + Keepalived 高可用群集构建

    文章目录 一 Keepalived 概述 1 为什么需要 keepalived 2 keepalived 是什么 3 keepalived 服务重要功能 4 keepalived 高可用故障切换转移原理 5 keepalived 体系主要模
  • 关于执行上下文的学习总结

    学习总结自 https juejin cn post 6844904145372053511 heading 1 执行上下文 Execution Context 全局执行上下文 函数执行上下文 eval执行上下文 每个执行上下文会创建 词法