执行上下文-通俗易懂版

(1)  js引擎执行代码时候/前,在堆内存创建一个全局对象,该对象 所有的作用域(scope)都可以访问,里面会包含Date、Array、String、Number、setTimeout、setInterval等等,其中还有一个window属性指向自己

(2)  js引擎执行代码时候会创建执行上下文栈,最开始执行全局代码,创建全局执行上下文

(3)  全局执行上下文 放到 执行上下文栈 ,这里面里面包括两部分内容:3.1把全局定义的变量,函数加到全局对象里面,但不会赋值,这一过程也就是变量作用域提升。3.2在执行代码中,对变量赋值,或者执行其他的函数

(4)  每一个执行上下文会关联一个vo(Variable Object)变量对象

(5)  全局代码被执行时候,这个vo对象就是全局对象了

(6)  执行过程中全局代码中遇到了函数,创建函数执行上下文(这里也就是执行上下文有哪几种了,全局,函数,eval函数这个一般不用也不建议用),接着把函数执行上下文放进执行上下文栈,上面说了每个执行上下文要有关联一个vo变量对象,当进入一个函数执行上下文时候,会创建一个AO对象(activation object),这个AO会作为函数的VO,会使用argument来初始化,并且初始化的值是传入的参数,如果函数里面还有函数,那继续创建函数执行上下文,也就是压栈,执行完毕出栈。以此执行

(7)  我们了解了变量对象后,代码在其上下文的执行环境的执行的过程中,会创建变量对象的一个作用域链,这个作用域链决定了各级上下文中的代码在访问变量和函数时的顺序。
        函数的作用域在函数创建时就已经确定了。当函数创建时,会有一个名为 [[scope]] 的内部属性保存所有父变量对象到其中。当函数执行时,会创建一个执行环境,然后通过复制函数的 [[scope]] 属性中的对象构建起执行环境的作用域链,然后变量对象 VO 被激活生成 AO 并添加到作用域链的前端,完整作用域链创建完成

        简单来说:沿着作用域链,内层代码可以访问外层声明变量与函数,外层无法访问内层声明的变量与函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/74345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据课程L4——网站流量项目的Hive离线批处理

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握网站流量项目的 Hive 的占位符与文件的调用; ⚪ 掌握网站流量项目的 Hive 离线批处理过程; ⚪ 掌握网站流量项目的定时任务改造Hive离线处理过程; 一、Hive 的占位符与文件的调用 …

Kafka3.0.0版本——文件清理策略

目录 一、文件清理策略1.1、文件清理策略的概述1.2、文件清理策略的官方文档1.3、日志超过了设置的时间如何处理1.3.1、delete日志删除(将过期数据删除)1.3.2、compact日志压缩 一、文件清理策略 1.1、文件清理策略的概述 Kafka 中默认的日志保存时间为…

QuantLib学习笔记——看看几何布朗运动有没有股票走势的感觉

⭐️ 小鹿在乱撞 小伙伴们肯定看过股票的走势,真是上蹿下跳啊,最近小编学了一丢丢关于随机过程和QuantLib的知识,想利用随机过程生成一个类似股票价格走势的图,安排!!! ⭐️ 随机过程 随机过程…

Python 之使用Numpy库来加载Numpy(.npy)文件并检查其内容

文章目录 总的介绍data.dtypedata.shapedata.ndimdata.size 总的介绍 要判断一个Numpy(.npy)文件的数据集类型,你可以使用Python中的Numpy库来加载该文件并检查其内容。以下是一些常见的步骤: 导入Numpy库: 首先&…

Kruise Rollout:基于 Lua 脚本的可扩展流量调度方案

作者:潘梦源 前言 Kruise Rollout [ 1] 是 OpenKruise 社区开源的渐进式交付框架。Kruise Rollout 支持配合流量和实例灰度的金丝雀发布、蓝绿发布、A/B Testing 发布,以及发布过程能够基于 Prometheus Metrics 指标自动化分批与暂停,并提供…

SSM - Springboot - MyBatis-Plus 全栈体系(四)

第二章 SpringFramework 四、SpringIoC 实践和应用 1. SpringIoC / DI 实现步骤 1.1 配置元数据(配置) 配置元数据,既是编写交给SpringIoC容器管理组件的信息,配置方式有三种。基于 XML 的配置元数据的基本结构: …

Redis-带你深入学习数据类型list

目录 1、list列表 2、list相关命令 2.1、添加相关命令:rpush、lpush、linsert 2.2、查找相关命令:lrange、lindex、llen 2.3、删除相关命令:lpop、rpop、lrem、ltrim 2.4、修改相关命令:lset 2.5、阻塞相关命令&#xff1a…

ElementUI浅尝辄止25:MessageBox 弹框

模拟系统的消息提示框而实现的一套模态对话框组件,用于消息提示、确认消息和提交内容。 从场景上说,MessageBox 的作用是美化系统自带的 alert、confirm 和 prompt,因此适合展示较为简单的内容。如果需要弹出较为复杂的内容,还是要…

在线实时监测离子风机的功能

离子风机是一种能够通过释放大量负离子来净化空气并提供清新环境的设备。要实现联网实时在线监测离子风机,可以考虑以下几个步骤: 1. 设备接入互联网:离子风机需要具备网络连接功能,可以通过无线网络或者以太网接入路由器&#x…

SSM - Springboot - MyBatis-Plus 全栈体系(五)

第二章 SpringFramework 四、SpringIoC 实践和应用 2. 基于 XML 配置方式组件管理 2.5 实验五:高级特性:FactoryBean 特性和使用 2.5.1 FactoryBean 简介 FactoryBean 接口是Spring IoC容器实例化逻辑的可插拔性点。 用于配置复杂的Bean对象&#x…

企业数字化神经网络

随着数字化时代的到来,数据已经成为企业战略性资源和重要的生产要素。企业数字化转型的核心是充分开发和利用数据资源,以数据为驱动,对业务流程进行重构与创新,从而提升企业的核心竞争力。业务系统是企业数据资源的源头&#xff0…

RabbitMQ 知识点解读

1、AMQP 协议 1.1、AMQP 生产者的流转过程 当客户端与Broker 建立连接的时候,会调用factory .newConnection 方法,这个方法会进一步封装成Protocol Header 0-9-1 的报文头发送给Broker ,以此通知Broker 本次交互采用的是AMQPO-9-1 协议&…

蚂蚁链发布全新Web3品牌ZAN,涉及RWA、合规等服务

9月8日,在外滩大会见解论坛「从科幻到科技:Web3、元宇宙、AIGC」现场上,蚂蚁集团旗下的蚂蚁链联合Everest Ventures Group、HASHKEY、Morpheus labs发布全新Web3品牌ZAN。原蚂蚁链CTO张辉担任ZAN CEO。 该品牌致力于服务Web3机构客户与Web3应…

靶场溯源第二题

关卡描述:1. 网站后台登陆地址是多少?(相对路径) 首先这种确定的网站访问的都是http或者https协议,搜索http看看。关于http的就这两个信息,然后172.16.60.199出现最多,先过滤这个ip看看 这个很…

【程序员装机】自定义Edge浏览器用户目录

文章目录 前言修改Edge用户目录的批处理脚本上述批处理脚本的功能包括 总结 前言 本文将介绍Edge浏览器用户目录的批处理脚本方式修改,以自定义Edge浏览器的磁盘缓存目录和用户数据目录。 修改Edge用户目录的批处理脚本 以下是一个用于修改Edge浏览器用户目录的批…

leetcode 43.字符串相乘

⭐️ 题目描述 🌟 leetcode链接:字符串相乘 思路: 代码: class Solution { public:string multiply(string num1, string num2) {if (num1 "0" || num2 "0") {return "0";}/*0 1 2 下标1 2…

天猫评价、销量计算逻辑规则再次变更

亲爱的商家: 综合考虑消费及商业趋势,并结合当下平台对多样化风险的管控能力,平台计划对《天猫商品评价、销量特殊计算逻辑说明》中的部分规则条款进行下线。请商家朋友们继续规范经营,平台如发现商家通过虚假交易、换宝贝、错放类…

树套树P3380

开O2过了 #include <iostream> #include <istream> #include <sstream> #include <vector> #include <stack> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <…

【JavaScript手撕代码】new

目录 手写 手写 /* * param {Function} fn 构造函数 * return {*} **/ function myNew(fn, ...args){if(typeof fn ! function){return new TypeError(fn must be a function)}// 先创建一个对象let obj Object.create(fn.prototype)// 通过apply让this指向obj, 并调用执行构…

Spring事务管理: 构建稳健的数据库事务处理

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…