JavaScript中的Hoisting

概要

本文在Javascript的Execution Context文章基础上,从代码执行的角度来谈谈变量提升,已经为什么let和const的变量不能进行变量提升。

代码分析

var 关键字定义的变量

下面的代码并不会报错,可以正常执行。

console.log(a)
var a = 0;

代码最后执行结果是打印undefined。我们讨论一下代码背后的原因。

首先, 创建JS Engine会创建GEC;

在这里插入图片描述
然后, 代码在GEC中执行。

在这里插入图片描述
此时,a的值就是undefined,所以打印出来的也是undefined。

我们打开浏览器通过断点执行,可以看到同样的执行结果。

在这里插入图片描述
因为a变量在最高的代码层级上,通过var被定义,所以在创建GEC的时候,会先将它赋值为undefined,后面根据代码的执行,再进行其它赋值。

所以虽然不能打印出0,但是因为变量提升,代码不会报错。

let/const关键字定义的变量

为什么下面的代码会报错?

console.log(a)
let a = 0;
const aa = 0;

在创建GEC的时候,变量a和常量aa都没有进入到GEC中,后面执行到打印语句的时候,因为在GEC中到不到对应的数据,所以就报错了。

在这里插入图片描述
打开浏览器,我们再次验证,结果是一样的,GEC中没有aa和a

在这里插入图片描述

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

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

相关文章

JS的一些方便遍历数组的API函数

这些函数有的时候在学到后面的内容会遇到,看一些前端的视频的时候突然出现这些函数看到有点懵,现在就整合一下,然后以后看到这些函数就知道是干什么的了 1、箭头函数 没学完js的必须得先了解箭头函数 //它两一样 function fn(){console.lo…

【P5735】【深基7.例1】距离函数

【深基7.例1】距离函数 题目描述 给出平面坐标上不在一条直线上三个点坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1​,y1​),(x2​,y2​),(x3​,y3​),坐标值是实数,且绝对值不超过 100.00,求围…

图文并茂!在Oracle VM VirtualBox上安装Ubuntu虚拟机的详细步骤指南

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

【LAMMPS学习】二、LAMMPS安装(3)通过Conda/tarball/git安装LAMMPS

2. LAMMPS安装 您可以将LAMMPS下载为可执行文件或源代码。 在下载LAMMPS源代码时,还必须构建LAMMPS。但是对于在构建中包含或排除哪些特性,您有更大的灵活性。当您下载并安装预编译的LAMMPS可执行文件时,您只能安装可用的LAMMPS版本以及这些…

202303 CSP认证 | LDAP

LDAP 好好好&#xff0c;难度直线上升&#xff0c;是一道又有了字符串处理味道的第三题 第一把写官网40分&#xff0c;acwing TLE且只通过了一道数据…本文是自己这题奋斗过程 的一个记录 先贴个40分的代码&#xff1a; #include<bits/stdc.h> using namespace std; t…

C++面试100问(九)

C中typdef和#define区别&#xff1f; #define是预处理命令&#xff0c;在预处理是执行简单的替换&#xff0c;不做正确性的检查&#xff1b;typedef是在编译时处理的&#xff0c;它是在自己的作用域内给已经存在的类型一个别名。 C中有哪些调试程序的方法&#xff1f; windows…

Servlet两种配置

通过xml配置 <servlet><servlet-name>MyServlet</servlet-name><servlet-class>MyServlet</servlet-class> </servlet> <servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/MyServlet</ur…

【nuget】如何移动 nuget 缓存文件夹

如何移动 nuget 缓存文件夹 一、了解NuGet包的默认存放路径二、为什么需要修改NuGet包的默认存放路径?使用下面的命令查看本地包位置三、更改下载的NuGet包存储位置四、修改VS离线包引用地址五、验证修改的新路径是否成功默认情况下,NuGet下载的包存放在系统盘(C盘中),这样一…

RecyclerView源码分析之二 滚动时候的ViewHolder的回收和复用

源码版本&#xff1a;androidx1.3.2 分析场景&#xff1a; RecyclerView 使用线性布局&#xff0c;方向为竖直方向&#xff0c;布局从上到下。第一次设置 LayoutManager 和 Adapter &#xff0c;正常显示数据以后&#xff0c;滚动 RecyclerView。 先说下结论&#xff1a; 在…

【C++通关攻略 · 基础篇】数据类型

✍作者&#xff1a;黑洞极客 &#x1f4d4;专栏&#xff1a;C&#xff1a;通关攻略 本篇文章将介绍 C 中的数据类型&#xff0c;有帮助的话别忘点赞收藏&#xff0c;关注专栏哦&#xff01; 数据类型 数据类型&#xff0c;顾名思义&#xff0c;就是内存中存储的数据的类型&…

U盘变本地磁盘?数据恢复有妙招!

一、U盘异变本地磁盘现象 在日常工作和生活中&#xff0c;U盘作为便携式的存储设备&#xff0c;广受大家喜爱。然而&#xff0c;有时我们会遇到一个奇怪的现象&#xff1a;原本应该显示为可移动磁盘的U盘&#xff0c;在插入电脑后却变成了“本地磁盘”。这种情况不仅让人困惑&…

论文解读之Attention-based Deep Multiple Instance Learning

前言 多实例学习是由监督学习演变而来的&#xff0c;我们都知道&#xff0c;监督学习在训练的时候是一个实例&#xff08;或者说一个样本、一条训练数据&#xff09;对应一个确定的标签。而多实例的特点就是&#xff0c;我们在训练的时候的输入是多个实例对应一个确定的标签&a…

JUC之CAS比较并交换

CAS 原子类引入 加入原子整型类的操作后&#xff0c;无锁化的操作 CAS 比较并交换 硬件级别的保证 源码分析 引出UnSafe类 UnSafe源码分析 unsafe中的do-while保证自旋 public final int getAndAddInt(Object var1, long var2, int var4) {int var5;do {var5 this…

JSON基础知识

目录 一、定义二、作用三、特点四、语法JSON具有以下这些形式&#xff1a;4.1 对象(JSONObject)&#xff1a;4.2 数组(JSONArray)&#xff1a;4.3 值4.4 字符串4.5 数值 五、常用的JSON解析方式5.1 org.json解析5.1.1 常用api5.1.2 get方法与opt方法对比5.1.3 使用示例5.1.3 参…

jS 正则

概念 正则表达式是用于匹配字符串中字符组合的模式。在 JavaScript中&#xff0c;正则表达式也是对象。这些模式被用于 RegExp 的 exec 和 test 方法, 以及 String 的 match、matchAll、replace、search 和 split 方法。 创建正则表达式 两种方法&#xff1a;字面量方式、构造…

Spring-3

目录 Spring AOP和AspectJ AOP 在Spring AOP 中&#xff0c;关注点和横切关注的区别 Spring 框架中的单例 Bean 是线程安全的吗 Spring 是怎么解决循环依赖的&#xff1f; 事务隔离级别 事务的传播级别 Spring 事务实现方式 Spring框架的事务管理有哪些优点 事务注解的…

2、高级语言的语法描述

常用的高级程序设计语言 程序语言的定义 语法 一组规则&#xff0c;用它可以形成和产生合适的程序 词法规则&#xff1a;单词符号的形成规则。 单词符号的形成规则单词符号是语言中具有独立意义的最基本结构 一般包括:常数、标识符、基本字、算符、界符等 描述工具:有限自动机…

膨胀 卷积

1.作用 Dilated convolution、Atrous convolution 增大感受野保持原输入大小 2.膨胀因子 描述的是相邻元素之间的距离 r 2 3.gridding effect 不合理的多个膨胀卷积之前&#xff0c;设计的膨胀因子不合理导致&#xff0c;在增大感受野的同时丢失了细节信息。 丢失&…

7.测试教程-自动化测试selenium-2

文章目录 1.webdriver API1.1元素的定位1.2id定位1.3name 定位1.4tag name 定位和class name 定位1.5CSS 定位(常用)1.5.1概念1.5.2实操1.5.3语法 1.6XPath 定位1.6.1概念1.6.2实操1.6.3语法 1.7link text定位1.8Partial link text 定位1.9一个简单的测试实战1.10CSS定位和XPat…