简述JS中执行环境与作用域的关系

深入解析USBlyzer抓包工具:从设备描述符到数据交互实战 本文深入解析了USBlyzer抓包工具在USB协议分析中的应用。从设备描述符的抓取与解读,到设置地址、配置描述符的实战分析,再到数据交互阶段的抓包技巧,文章通过具体案例详细展示了如何使用USBlyzer透视USB总线通信,是排查设备驱动问题、逆向分析通信协议和学习USB规范的实用指南。 阅读详情

大家好,这里是修真院技术分享,今天给大家分享的是

1.背景介绍
执行环境:

执行环境(execution context,为简单起见,有时也称为“环境”)是JavaScript 中最为重要的一个概念。执行

环境定义了

变量或函数有权访问的其他数据,决定了它们各自的行为。——《JavaScript高级程序设计(第3版)》

每个函数都有一个自己的执行环境。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变

量和函数定义也随之销毁(全局执行环境直到应用程序退出——例如关闭网页或浏览器——时才会被销毁)。

——《J3》

变量对象:

每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对

象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。——《J3》

2.知识剖析
作用域链:

当代码进入到某个执行环境,准备执行时,会为该执行环境对应的变量对象创建一个作用域链。作用域链其实就相当于一个变量

对象的集合,其第一个元素是当前执行环境的变量对象,最后一个元素是全局执行环境的变量对象(在浏览器中即window对象)。

标识符解析:

标识符解析是沿着作用域链一级一级地搜索标识符的过程。——《J3》

标识符解析说白了就是查找变量(包括函数定义)。而且这个查找过程是按照作用域链的顺序走的,也就是先搜索当前执行环境

的变量对象,找到就终止,没找到就继续搜索上一层执行环境的变量对象,一直搜索到顶层的window对象。

tip:真特么不是人话的,高程…个人的理解的作用域:

其实就是[[scope]],每个js的函数都是一个对象,对象中有写属性我们可以访问,有些不行;

js引擎存取的[[scope]]就是其中一个;它就是作用域,是隐性的属性,只有系统能够用它,存储了执行期的上下文的集合。

3.常见问题

在ES5中没有块级作用域,具体指的什么?ES6的块级作用域又有哪些表现?

如果是在Java、C语言中,上面的i会在for语句执行完后就被销毁,但在JavaScript中,

for语句中的变量声明会将变量添加到当前的执行环境(if语句也是),这里就是全局环境,所以即使是for循环

执行完了,变量i也会存在循环外部的执行环境中。

JS声明变量中,有var、const、let三种,后两者是有块级作用的效应,在严格模式下特别明显;

4.解决方案

ES6块级作用域的表现:

1、允许任意多个块级作用域的嵌套,而且外层作用域无法读取内层作用域的变量;

2、内层作用域可以定义外层作用域的同名变量;

3、可以让ES5中得到广泛应用IIFE(立即执行函数退休)。

5.编码实战

6.扩展思考

1、执行环境和作用域是一回事吗?

作用域和执行环境是两个完全不同的概念,我们试图给他俩分别一个明确的定义,发现很难,因为你很难定义一个

概念“是什么”,但是我们可以搞清楚他们分别起什么作用。另一个令人迷惑的地方就是js中的this关键字。其实执行

环境就是this的值。总的来说,作用域是相对于函数来讲的,因为ES5 里没有块级作用域,只有函数才能形成新的

作用域。而且作用域在函数声明时就定义好了。

作用域里声明的变量和函数,外部无法访问,注意,是外部。而执行环境在函数被调用时才生成。

函数作用域中的变量一定访问不到?即局部变量访问不到吗?

按道理说,局部变量在全局环境中访问不到的,但是闭包的出现打破了这个定律。

7.参考文献

参考一:JS高级程序设计

参考二:ES6块级作用域部分

参考三:head first

8.更多讨论

1、块级作用的缺点在哪里?

块级作用域,对javascript是一个巨大提升,但是它也有一个显而易的缺点,就是块级作用域没有返回值。

本质上块级作用域是一个语句,将多个操作封装在一起,没有返回值。
{
let a=1;
a++;
}
上面的代码中,块级作用域将两个语句封装在一起,但是在块级作用外,没有办法得到a的值,因为块级作用域不返回值,除非a是全局变量。
现在有一个提案,是的块级作用域可以变成表达式,既可以返回值,办法就是在块级作用域之前加上do,是他变成do表达式。
let x= do {
let a=1;
a++;
}

上述代码中,变量x会得到整个块级作用域的返回值。

2、为什么需要块级作用域?

1、内层变量可能会覆盖外层变量

2、用来记数的循环变量,可能会泄露为全局变量

3、什么是闭包呢?

这个问题就很值得探讨了。又可以讲一大段时间,但是这里有个经典的例子可以看下:

var justAVar = “Oh,don’t you worry about it, I’m GLOBAL”;

function whereAreYou() {
var justAVar = “Just an every day LOCAL”;

function inner() {

    return justAVar;
}

return inner;//这里并没有被调用

};

var innerFuction = whereAreYou();
var result = innerFuction();
console.log(result);
注意:上图的红字。inner()并没有被调用,意味着什么?它的执行环境并没有结束被销毁,它整个被丢到外面去

了,不只是它的本身,还包括了它的执行环境,这使得原本属于内部的执行环境直接被迫变成了全局的!

这,就是闭包的本质!

从来没有什么闭包,从来都是函数本身的特性罢了。这就是我自己的观点。

学习STM32的流体水位传感器 引言: 流体水位传感器是一种常用于测量液体水位的设备,广泛应用于水位监测、液位控制和流量计量等领域。STM32是一款功能强大的单片机,具有丰富的外设和灵活的编程能力,非常适合用于流体水位传感器的开发。本文将介绍如何使用STM32开发板与流体水位传感器进行连接和通信,并通过编写代码实现水位的测量和显示。五、总结: 通过以上的代码示例,我们可以实现使用STM32开发板与流体水位传感器进行连接和通信的功能。三、编写代码: 以下是使用STM32CubeIDE编写的示例代码,实现了读取流体水位传感器的功能。 阅读详情

相关推荐

RISC-V— 架构基础知识学习

蜂鸟 E200 系列是一个开源的RISC-V 处理器。蜂鸟 E200 系列由中国大陆研发团队开发,用户能够轻松与开发人员取得交流和支持。RI蜂鸟 E200 处理器研发团队拥有在国际一流公司多年开发处理器的经验,使用稳健的Verilog 2001 语法编写的可综合 RTL 代码,以工业级标准进行开发。蜂鸟 E200 的代码为人工编写,添加丰富的注释且可读性强,非常易于理解。

deilt 1万+

执行环境与作用域

执行环境包括全局执行环境函数执行环境,window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。某个执行环境中的所有代码执行完毕后,该环境被销毁, 保存在其中的所有变量和方法也随之销毁(全局执行环境直到应用程序退出——例如关闭网页或浏览器——时才会被销毁) 函数执行环境:当执行流进入一个函数时,函数的环境就会被推入一个环境栈中,而在函数执行之后,栈将其环境弹出,把控

chanda_yang的博客 450

【03】海康MVS V4.3.0 ——安装教程、查看示例、库、头文件、开发指南

海康威视MVS机器视觉软件安装与使用指南:首先从官网下载MVS 4.3.0安装包,默认设置完成安装。安装后可在Development目录查看示例代码、开发文档及头文件,支持C++/C#/Python等多语言开发。软件内置虚拟相机功能,通过工具菜单添加虚拟设备后即可模拟真实相机操作,支持中英文界面切换、参数调节(曝光/增益等)及图像采集功能。虚拟相机虽仅能显示预设图像,但完整保留了参数调节功能,适合开发者进行功能测试。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 3306

简述执行环境与作用域

1.背景介绍执行环境:执行环境(execution context,为简单起见,有时也称为“环境”)是JavaScript 中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。——《JavaScript高级程序设计(第3版)》每个函数都有一个自己的执行环境。某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的所有变量和函数定义也随之销毁(全局执行环境直...

qq_41865159的博客 594

Python 映射函数map()详解

Python 映射函数map()详解

分享我的点点滴滴,在成长路上与你同行! 2139

Windows 11登录界面密码框消失Bug解析与解决方案

Windows操作系统登录认证机制是系统安全的第一道防线,其图形界面由桌面窗口管理器(DWM)负责渲染。当UI元素渲染异常时,会导致密码输入框等关键组件不可见。这类图形子系统故障通常源于驱动兼容性或主题服务冲突,在Windows 11最新累积更新后尤为常见。通过系统文件检查(sfc)、注册表修复或创建新用户等工程实践方法可有效解决问题。对于企业IT环境,建议采用PIN码或生物识别等替代认证方案,同时定期执行磁盘清理和系统健康检查等Windows维护操作,确保认证服务稳定运行。

weixin_33806859的博客 609

JS中执行环境与作用域的关系

【JS-TASK01】简述JS中执行环境与作用域的关系 1.背景介绍 核心概念 执行环境 环境栈 作用域链 2.知识剖析 执行环境是什么? 执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。 每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。 我们编写的代码是无法访问这个对象的,但解析器在处理数据时会在后台使用它。 全局执行环...

qq_42247970的博客 415

Dinic算法的复杂度分析及证明

一般图 复杂度主要取决于dfs增广的过程。 将dfs部分的复杂度分成两部分来分析:1)修改增广路上边的流量。至多会增广mmm次,一条增广路的长度至多是nnn,所以这一部分的复杂度是O(nm)O(nm)O(nm)。2)dfs遍历时找增广路失败时经过的边。由于一旦从某条边出发找最短路失败了,我们就不会再走那条边(当前弧优化),所以这一部分的复杂度是O(m)O(m)O(m)的。故而dfs增广的复杂度是O...

这个博客已经搬到了:zhongyuwei.github.io 4391

原生JS执行环境与作用域深入理解

原生JS执行环境与作用域深入理解

越努力,越幸运! 6773

【人工智能】架构师必读:大模型时代的意图识别 (Intent Recognition) 四大技术流派与实践指南

意图识别没有“银弹”,选择哪种方案取决于具体的业务需求、数据积累以及成本预算。如果追求极简与低成本,BERT 是不二之选。如果业务极其复杂且依赖上下文,RAG 或 Agent 模式更合适。如果追求极致的稳定与效果,基于 LLM 的微调 + Function Calling 是目前的行业最佳实践。参考资源:基于 LLM 的意图识别解决方案(Embedding 相关课程章节)

奶爸的编程之路,也就一周冷个三天 702

20 硬件工程师笔面试高频考点真题解析——寄存器

摘要: 寄存器是由多个边沿触发的D触发器组成的多位存储单元,用于同步时序电路中的数据暂存、隔离毛刺、跨时钟域同步等。选型需考虑位宽、触发方式(边沿/电平)、异步控制、电气参数等。核心时序参数包括建立时间(Tsu)、保持时间(Thold)和时钟输出延迟(Tco)。寄存器广泛应用于时序逻辑、流水线分割、毛刺消除、跨时钟域同步及计数分频等场景。同步复位依赖时钟边沿,时序易收敛但需时钟支持;异步复位独立于时钟,上电可靠但需注意亚稳态风险。

XU157303764的博客 1342

简述JS中执行环境与作用域的关系?

执行环境 执行环境(execution context,为简单起见,有时也称为“环境”)是 JavaScript 中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。 全...

天心天地生的博客 563

Simulink进行无人机飞行力学建模与仿真

摘要:本文详细介绍了使用MATLAB/Simulink进行四旋翼无人机飞行力学建模与仿真的步骤。内容包括准备工作、动力学方程概述、模型构建(使用State-Space或Simscape Multibody)、可选控制器设计、仿真参数配置及结果分析。教程强调理解飞行力学原理和坐标系转换的重要性,建议根据需求选择模型复杂度,并推荐查阅学术文献获取更深入的建模方法。通过本教程,读者可掌握无人机动力学建模基础,为控制系统开发和性能优化奠定基础。

amy_mhd的博客 272

JavaScript要点详解:执行环境及作用域

执行环境(execution context)是JavaScript中最为重要的一个概念。执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象(variable object),环境中定义的所有变量和函数都保存在这个对象中。虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它。作用域链的原理在JavaScript中保持基本一致。块级作用域在ES6中已经有了很大的改变,也是面试中常考的变量申明的区别所在。

weixin_43197654的博客 1417

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深入JavaScript之JS引擎如何执行JS代码

我们大概经常能听到“执行环境”、“作用域”、“原型(链)”、“执行上下文”等内容,它们都在描述什么? JS代码的运行 我们知道了js是弱类型语言,在运行时才确定变量类型。js引擎在执行js代码时,也会从上到下进行 词法分析、语法分析、语义分析 等处理,并在代码解析完成后生成AST(抽象语法树),最终根据AST生成CPU可以执行的机器码并执行。 除此之外,JS引擎在执行代码时还会进行其它处理,如 V8 中还有两个阶段: 编译阶段:该阶段会进行执行上下文的创建,包括创建变量对象、建立作用域链、确定 this

flying meng的菜鸟居 5946

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

了解JavaScript的执行环境及作用域

执行环境定义了变量或函数有权访问的其他数据,决定了它们的各自行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个对象中。虽然我们无法访问这个对象,但是解析器在处理数据时会在后台使用它。全局执行环境是最外围的一个环境,根据JavaScript实现所在的宿主环境不同,表示执行环境的对象也不一样。在web浏览器中,全局执行环境被认为是window对象,因此所有全局变量和函数都是作为window对象的属性和方法创建的。

冰咖啡的专栏 1142

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

浅谈JavaScript中执行上下文与作用域,JS解析引擎

执行上下文,JS解析引擎,作用域,作用域链

m0_63278331的博客 1450

Javascript执行&作用域全面总结

只要在当前作用域的var都收集 如下,由于没有块作用域这个概念,所以if块中的var a也属于全局作用域。

weixin_40710412的博客 1100

JS的执行环境及作用域

执行环境 定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个变量对象中,但是我们编写代码不能访问这个变量对象,解析器在处理数据时会在后台使用它。 全局执行环境:在JavaScript中window对象表示的是全局执行环境,全局执行环境是最外围的环境,所有的全局变量和函数都是作为window对象的属性和方法的。...

qq_44169219的博客 292

JavaScript之执行环境与作用域

执行环境是JavaScript中的一个重要的概念。

但愿人长久 千里共婵娟 341

JavaScript执行环境及作用域

一、执行环境 执行环境定义了变量或者函数有权访问的其他数据,决定了他们各自的行为。每个执行环境都有一个与之关联的变量对象。环境中定义的所有变量和函数都保存在这个对象中。 执行环境是一个概念,一种机制,它定义了变量或函数是否有权访问其他数据 1.全局环境 全局环境是最外围的一个执行环境。全局执行环境被认为是window对象。因此所有全局变量和函数都是作为window对象的属性和方法创建的。代码载入浏览器时,全局执行环境被创建(当我们关闭网页或者浏览器时全局执行环境才被销毁)。比如在一个页面中,第一次载入JS代

weixin_45003524的博客 677

JavaScript执行环境、作用域及this值

执行环境JavaScript的执行环境定义了其中的变量和函数有权访问的其他数据,即规定了在其内部能够访问什么数据。每个执行环境都有一个与之相关联的“变量对象”,环境中定义的变量和函数都保存在这个对象之中,可以理解为环境内的变量和函数都是这个变量对象的属性和方法,但是这个变量对象我们无法通过js访问到。可能这个概念有点难以理解,我们来看看一个例子:全局执行环境是最外围的一个执行环境,在web浏览器中...

paper_crane的博客 1189

【JS】JavaScript中的执行环境与作用域

JavaScript中的执行环境定义了变量或函数有权访问的数据(每个函数都有自己的执行环境),全局执行环境是最外围的执行环境,在浏览器中,全局执行环境就是window对象,所以所有的全局变量和函数都是作为window对象的属性和方法创建的。当某一个执行环境中所有代码执行完成后,该环境就被销毁,保存在其中的变量和函数也将被销毁,全局执行环境在关闭网页或浏览器时才被销毁。 ...

aodongni1633的博客 167

JS - 执行上下文、作用域链与闭包

你是否发现了,在 JS 中只有内部函数能访问外部函数的变量,外部函数却不能访问内部函数的变量?还有,为什么所有的 JS 代码都是按照从上至下的顺序执行的?它们究竟受到什么机制的控制?善战者无赫赫之功。JavaScript 的精华所在,恰恰就是这些我们经常忽视的地方。你想知道的,我都会为你解答,起航!执行上下文就是代码执行时所处的当前环境,其中包含了这段代码执行所需的所有信息。作用域(静态规则)、执行上下文(动态环境)与闭包(状态持久化)共同构成了 JS 变量访问的核心机制。

2401_86373285的博客 1050

关于JavaScript的执行环境与作用域的解读

JavaScript高级编程中关于执行环境与作用域的问题在第四章有过提及,但是交代的不是很明确,因此查阅了网上各种资料,对于执行环境以及作用域有了一个初步的认识。一、什么是执行环境(execution context) 执行环境在书中是这样定义的:执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。 对于execution context的翻译有两种,一种是执行环境,一种是执行上下

monster1935的专栏 480

浅谈JS执行环境和作用域

今天刚刚开通博客,也是第一次写博文,略感紧张。作为一个表达能力弱弱的人来说,自己花三分钟理解一个知识点,当别人问起时,也许需要30分钟才只是让别人知道自己在说什么,一点也不夸张,希望在博客上可以练习对语言的组织能力并记录学习笔记与大家一起交流。   进入正题>> 首先,相关的概念定义如下:   1. 执行环境: 所有 JavaScript 代码都是在一个执行环境中被执行的。执...

qq_32888087的博客 303
上一篇: js中this的指向
下一篇: 什么是CSS Sprites?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值