理解javascript原型和作用域系列(8)——简述【执行上下文】

说说JS的执行上下文 先推荐几篇微信文章链接,有兴趣的小伙伴可以看看。 1、内存空间详细图解 http://mp.weixin.qq.com/s/NGqdjhoU3MR9LD0yH6tKIw 2、执行上下文详细图解 http://mp.weixin.qq.com/s/hRE3HzeSxxok1bLI8vH1yw 3、变量对象详解 http://mp.weixin.qq.com/s/LijjPErxcF... 阅读详情

什么是%26ldquo;执行上下文%26rdquo;(也叫做%26ldquo;执行上下文环境%26rdquo;)?暂且不下定义,先看一段代码:

第一句报错,a未定义,很正常。第二句、第三句输出都是undefined,说明浏览器在执行console.log(a)时,已经知道了a是undefined,但却不知道a是10(第三句中)。

在一段js代码拿过来真正一句一句运行之前,浏览器已经做了一些%26ldquo;准备工作%26rdquo;,其中就包括对变量的声明,而不是赋值。变量赋值是在赋值语句执行的时候进行的。可用下图模拟:

这是第一种情况。

%26nbsp;

下面还有。先来个简单的。

有js开发经验的朋友应该都知道,你无论在哪个位置获取this,都是有值的。至于this的取值情况,比较复杂,会专门拿出一篇文章来讲解。

与第一种情况不同的是:第一种情况只是对变量进行声明(并没有赋值),而此种情况直接给this赋值。这也是%26ldquo;准备工作%26rdquo;情况要做的事情之一。

%26nbsp;

下面还有。。。第三种情况。

在第三种情况中,需要注意代码注释中的两个名词%26mdash;%26mdash;%26ldquo;函数表达式%26rdquo;和%26ldquo;函数声明%26rdquo;。虽然两者都很常用,但是这两者在%26ldquo;准备工作%26rdquo;时,却是两种待遇。

看以上代码。%26ldquo;函数声明%26rdquo;时我们看到了第二种情况的影子,而%26ldquo;函数表达式%26rdquo;时我们看到了第一种情况的影子。

没错。在%26ldquo;准备工作%26rdquo;中,对待函数表达式就像对待%26ldquo; var a = 10 %26rdquo;这样的变量一样,只是声明。而对待函数声明时,却把函数整个赋值了。

%26nbsp;

好了,%26ldquo;准备工作%26rdquo;介绍完毕。

我们总结一下,在%26ldquo;准备工作%26rdquo;中完成了哪些工作:

  • 变量、函数表达式%26mdash;%26mdash;变量声明,默认赋值为undefined;
  • this%26mdash;%26mdash;赋值;
  • 函数声明%26mdash;%26mdash;赋值;

这三种数据的准备情况我们称之为%26ldquo;执行上下文%26rdquo;或者%26ldquo;执行上下文环境%26rdquo;。

%26nbsp;

这里插一句题外话:通过以上三种情况,你可能会联想到网上的有些考js语法的题目/面试题。的确,几乎每个js语法题中都有这种题目出现。之前你遇到这种题目是不是靠背诵来解决?背过了,隔几天又忘记了。%26mdash;%26mdash;任何问题,都要去追根溯源,要知道这个问题是真正出自哪一块知识点,要真正去理解。光靠背诵是没用的。

%26nbsp;

细心的朋友可能会发现,我们上面所有的例子都是在全局环境下执行的。

其实,javascript在执行一个代码段之前,都会进行这些%26ldquo;准备工作%26rdquo;来生成执行上下文。这个%26ldquo;代码段%26rdquo;其实分三种情况%26mdash;%26mdash;全局代码,函数体,eval代码。

%26nbsp;

这里解释一下为什么代码段分为这三种。

所谓%26ldquo;代码段%26rdquo;就是一段文本形式的代码。

首先,全局代码是一种,这个应该没有非议,本来就是手写文本到%26lt;script%26gt;标签里面的。

其次,eval代码接收的也是一段文本形式的代码。

最后,函数体是代码段是因为函数在创建时,本质上是 new Function(%26hellip;) 得来的,其中需要传入一个文本形式的参数作为函数体。

%26nbsp;

这样解释应该能理解了。

%26nbsp;

最后,eval不常用,也不推荐大家用。

下一节我们介绍函数的情况,并一起总结一下执行上下文到底包含哪些内容。敬请期待。

---------------------------------------------------------------------------

本文已更新到《理解javascript原型和作用域系列》的目录,更多内容可参见《理解javascript原型和作用域系列》。

另外,欢迎关注我的微博。

也欢迎关注我的其他教程%26mdash;%26mdash;别怕,都是免费的!

《微软petshop4.0源码解读视频》《json2.js源码解读视频》

--------------------------------------------------------------------------

Mac安装Typescript报错 根本原因是系统级目录的权限限制。推荐通过修改目录权限或使用nvm彻底解决问题。 阅读详情

相关推荐

AD学习笔记(一)基础认识

文章目录AD学习笔记第一讲 AD基础认识一、两库两图(分别对应下图)1、PCB图(pcbdoc)2、原理图(schdoc)3、原理图库(schlib)4、PCB库(pcblib)二、封装1、DIP封装2、LQFP封装三、绘制整体流程1、建立工程(PrjPcb)2、建立两库两图并保存整个工程(五次)3、从库中提取绘制原理图4、原理图导入pcb图5、根据原理图布线6、pcb图交由工厂打板 AD学习笔记 第一讲 AD基础认识 一、两库两图(分别对应下图) PCB图(pcbdoc) 原理图(schdoc) PCB库

qq_52465473的博客 6686

一张图,告诉你什么是js执行上下文

初学js,根据自己的理解画的,如果有误,还请高手指正,拜谢~~

luo15256533579的博客 2436

UFS 功能描述:UFS boot

UFS 启动过程介绍:启动配置,启动代码下载过程和安全性

m0_51720747的博客 1606

理解js作用域原型链和执行上下文

作用域跟函数紧密相关。每个函数就是一个作用域,同时包括一个全局的作用域。作用域有上下级关系,子作用域可以访问到父作用域的变量跟函数,但是父作用域无法访问到子作用域的变量跟函数(这里说的访问是直接访问,通过闭包是可以间接访问到的)。 js中一切都是对象,除了基本值类型之外。其他都是object。函数是一种特殊的对象,因为对象都是由函数生成的。 执行上下文,每执行一次函数便会产生一个新的执行上下文

fhb19870610的专栏 1257

武汉理工大学数据结构综合实验——连连看游戏综合实践

文章目录实验目的主要仪器设备及耗材一、实验要求二、分析与设计(非线性结构)1.数据结构的设计2.核心算法设计一条直线消子两条直线消子三条直线消子初始化游戏地图搜寻路径提示和重排3.测试用例设计4.测试效果总结 实验目的 (1)线性结构实验目的 调研连连看游戏,了解连连看游戏的功能和规则等 掌握集成开发工具VS2019的使用和C++的基础编程 了解MFC框架 了解线性结构,掌握数组的遍历、消子和胜负判断等算法 了解企业软件开发过程,应用迭代开发思路进行项目开发,养成良好的编程习惯和培养软件工程化思维 .

mo_zhe的博客 7612

OpenCV视频防抖算法实现与优化指南

本文详细解析了如何使用OpenCV实现视频防抖算法。通过特征点检测与光流跟踪估算帧间运动,利用滑动平均平滑运动轨迹,并应用仿射变换重塑视频帧。文章提供了完整的代码实现、参数调优指南及黑边处理等优化技巧,帮助开发者高效处理手持拍摄等场景下的视频抖动问题。

weixin_29062823的博客 342

深入理解JS—作用域和执行上下文

上次谈过原型链的概念,其中我们会有个疑问对于一个原型链而言,肯定会存在所取值的范围规定,那么我们能否跨过这些范围去取值?又该如何取?在这里,就要谈到 作用域的问题。 作用域简单的说,作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。 全局作用域在代码中任何地方都能访问到的对象拥有全局作用域,一般来说以下几

Cecilia 1673

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 985

浅谈js中的词法作用域、作用域和执行环境

最近温习了一下关于this的内容,发现以前看的知识点都忘了,所以为了不让自己再忘,就把自己当前的理解记录了下来。下面的理解如果存在不正确的地方欢迎大家指出哦。1、定义(1)词法作用域:是作用域的其中一个工作模型(另外一个是动态作用域,在js中只有this涉及动态作用域),词法作用域主要在代码的编译阶段,一个变量和函数的词法作用域取决于该变量和函数声明的地方。(而动态作用域是取决于变量和函数被调用的...

EnmengXu的博客 2241

[DA45] 使用PageRank算法分析希拉里邮件中的人物关系

一. 相关知识 (一) PageRank算法 PageRank 算法是 google 公司的创始人拉里·佩奇和谢尔·盖布林于1998年提出的网页搜索优化算法. 详细内容请见百度百科:google pagerank. 如果你了解了该算法, 就能明白上一段的超链接从本页面链出, 链入百度百科的 PageRank 算法页面增加了该页面...

Vincent_Chu的博客 2378

7.91版本unidbg调用方式

【代码】xhs最新7.91版本unidbg调用方式。

Codeooo 博客 1107

js高级原型与原型链、执行上下文与执行上下文栈、作用域与作用域链、闭包以及递归

_proto__属性的作用就是当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(父对象)里找,一直找,直到__proto__属性的终点null,再往上找就相当于在null上取值,会报错。* 当一个嵌套的内部(子)函数引用了嵌套的外部(父)函数的变量(函数)时, 外部函数调用 就产生了闭包。一个函数(子函数)访问另一个函数(父函数)中的变量,外部函数调用,此时就有闭包产生,那么这个变。

奋斗的小前端 913

【定位模块算法】amcl(蒙特卡洛)粒子滤波定位算法(附C++代码)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言(1)amcl定位框架介绍(2)amcl定位框架组成(1)ROS-TF坐标转换树【ROS的工具】(2)robot_pose_ekf扩展卡尔曼位姿估计算法(3)定位amcl自适应蒙特卡洛定位,adaptive monte carlo localizaion**(3)amcl定位节点的订阅与发布(4)amcl定位功能包用法(1)编写amcl节点相关的launch(amcl_omni.l

qq_35635374的博客 4403

对于js的原型和原型链的理解

一、原型与原型链 JavaScript是一门基于原型的语言,在软件设计模式中,有一种模式叫做原型模式,JavaScript正是利用这种模式而被创建出来 原型模式是用于创建重复的对象,同时又能保证性能,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。原型模式的目的是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新...

浮生离梦的博客 4万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

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

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

flying meng的菜鸟居 6006

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JS面试题-原型及原型链、作用域及作用域链、闭包

JavaScript常被描述为一种基于原型的语言(prototype--basedlanguage)——每个对象拥有一个原型对象,对象以其原型为模板、从原型继承方法和属性。原型对象也可能拥有原型,并从中承方法和属性,一层一层、以此类推。这种关系常被称为原型链(prototypechain),它解释了为何一个对象会拥有定义在其他对象中的属性和方法。—如上内容摘自MDN简单理解原型链就是在当前对象中找不到定义的话,会在当前对象的原型对象上继续查找,直至undefined。name20};...

weixin_49172439的博客 5846

深入理解 JavaScript 作用域:从执行上下文到词法环境的底层机制解析

本文将从 JavaScript 引擎执行过程入手,深入解析作用域、作用域链、变量提升、TDZ、块级作用域栈等底层机制。阅读完成后,你会真正理解 JS 为什么“看上去怪怪的”,以及 ES6 如何弥补历史缺陷。

2401_88920300的博客 1321

JavaScript中的执行上下文、作用域链和闭包详解

执行环境 执行环境定义了变量或函数有权访问的其他数据,决定了它们各自的行为。每个函数都有自己的执行环境。执行环境中定义的变量或函数保存在变量对象中。 例如,在web浏览器中,全局执行环境被认为是windows对象,因此所有全局变量和函数都是作为 window 对象的属性和方法创建的,比如我们调用windows.load()方法。 某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中的...

IT_10的博客 2850

javascript高级篇——理解原型和作用域【连载中...】

该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分——原型和作用域,当然,肯定少不了原型链和作用域链。帮你揭开javascript最神秘的面纱。

王福朋 1540

我对js原型和原型链的理解

我们知道在js中,万物皆对象,对象可以说是重中之重了。每一个对象都拥有自己的属性。但是在这个世界中有很多东西都是相似的,可以归为一类,他们有共同的方法和属性。不可能让每一个对象都定义一个属性吧。那样太消耗内存了。所以,在js中怎么才能让多个对象共享一个或多个方法呢?原型的出现就是为了解决这个问题。 在js中每个对象都有一个与它关联的对象,叫做原型对象。每一次获取对象属性都是一次查询过程,当在对象...

清风了了的博客 1万+

作用域、执行上下文、作用域链和闭包

本文主要讲了变量声明、提升和暂时性死区的本质,接着又讲了什么是作用域、执行上下文、作用域链和执行栈的作用。希望通过本文可以让你对JS有更深的认识。

你好呀 657

从js闭包谈到作用域、作用域链、执行上下文、内存管理

闭包是 JavaScript 中最基本也是最重要的概念之一。可是闭包又绝对不是一个单一的概念: 它涉及作用域、作用域链、执行上下文、内存管理等多重知识点。

全栈弄潮儿 1268

细说JS中执行上下文与作用域链

相信很多小伙伴在初学JavaScript时会对执行上下文,作用域链等概念混淆,我将通过这篇文章用代码和图文的形式来给大家分享一下理解JS中执行上下文与作用域链的方法。话不多说,直接开整。

mini_malism_的博客 687

通过JavaScript执行机制去学习闭包,执行上下文,作用域,作用域链。

函数执行中的变量和函数: 在执行过程中,若使用了未声明的变量,那么 JavaScript 执行会报错。 在一个变量定义之前使用它,不会出错,但是该变量的值会为 undefined,而不是定义时的值。 在一个函数定义之前使用它,不会出错,且函数能正确执行。 下面是关于同名变量和函数的两点处理原则: 如果是同名的函数,JavaScript编译阶段会选择最后声明的那个。 如果变量和函数同名,那么在编译阶段,变量的声明会被忽略 变量提升:JS代码在执行过程中,JS去引擎把变量的声明部分和函数的声明部分提升到

weixin_43405946的博客 457
上一篇: [Linux] 在 Linux CLI 使用 ssh-keygen 生成 RSA 密钥
下一篇: 阿里云ECS部署node.js及防火墙80端口开启
lin91o7c
博客等级 码龄12年 1粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值