JavaScript中的Hoisting

news2024/11/17 10:50:57

概要

本文在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.coloradmin.cn/o/1516371.html

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

相关文章

陪诊小程序开发:暖心陪伴,就医无忧

在繁忙的生活中,就医往往成为了一件让人头疼的事情。挂号、取药、排队……一系列繁琐的流程让人应接不暇。为了让您就医更加便捷、舒心,我们推出了陪诊小程序,为您提供贴心、专业的陪诊服务。 陪诊小程序致力于为用户提供全方位的陪诊体验。…

FreeRTOS操作系统学习——中断管理

中断管理介绍 嵌入式实时系统需要对整个系统环境产生的事件作出反应。这些事件对处理时间和响应时间都有不同的要求。事件通常采用中断方式检测,中断服务例程(ISR)中的处理量应当越短越好。ISR是在内核中被调用的, ISR执行过程中,用户的任务…

校园生活信息平台:Java+Vue+MySQL全栈实践

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【linux深入剖析】操作系统与用户之间的接口:自定义简易shell制作全过程

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.shell2.自定义shell的准…

单据分页的实现

单据分页的实现 1. AceWzcgfkjtMaintainProxy.java package nc.ui.jych.wzcgfkjt.ace.serviceproxy;import nc.bs.framework.common.NCLocator; import nc.itf.jych.IWzcgfkjtMaintain; import nc.ui.uif2.components.pagination.IPaginationQueryService; import nc.vo.jych.…

从政府工作报告探计算机行业发展(在医疗健康领域)

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

如何在Linux系统部署APITable容器并实现无公网IP远程管理本地数据

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台,是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

PMP成绩判定标准是什么?

2024年3月10日的PMP考试已经结束,不知道大家考得怎么样,对于考试难度有没有值得分享或者吐槽的?可以发出来大家交流一下~ 一、3月PMP考试成绩什么时候出? 按照往期考试成绩发布时间,基本在考后6-8周会出成绩&#xf…

OSCP靶场--Astronaut

OSCP靶场–Astronaut 考点(1.CVE-2021-21425getshell 2.suid php提权) 1.nmap扫描 ┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC -p- 192.168.163.12 --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-14 01:24 EDT Nmap scan report for 192.16…

1个二维码能包含多个视频吗?制作视频二维码的方法

二维码在生活中现在随处可见,除了用于支付之外,展示内容也可以通过二维码来展现,比如常见的视频、图片、文件、音频等内容都可以通过二维码来展现。那么当我们需要将多个视频存入一个二维码中展示时,该如何利用二维码生成器的工具…

【超图】导入txt文件至udbx数据源中

作者:taco 最近在支持的过程中,有客户遇到了txt类型的数据导入到udbx中,不知如何导入。本身以为是客户不会用产品,直接叫嚣着客户,数据拿来我看看。 好家伙数据一拿来我直接蒙了。这啥破数据啊。咋一行一行的一点不规整…

【2024-完整版】python爬虫 批量查询自己所有CSDN文章的质量分:附整个实现流程

【2024】批量查询CSDN文章质量分 写在最前面一、分析获取步骤二、获取文章列表1. 前期准备2. 获取文章的接口3. 接口测试(更新重点) 三、查询质量分1. 前期准备2. 获取文章的接口3. 接口测试 四、python代码实现1. 分步实现2. 批量获取文章信息3. 从exce…

程序员想要搞钱不迷茫,这篇文章你可得码好啦!!!

年已经过完了,现在大家基本都已经返工返校了吧!咱又要投入到新一年的战斗了!春色恼人不等闲,相信咱都有一个实实在在的愿望和期许:身体健康,财源广进!新的一年我们还得继续努力,多多…

自定义Model实现一个增删改查等功能的复用型表格QTableView

目录 一、表格功能总结与预览 1.功能总结 2.尚欠缺的功能(后续可能会补充) 二、功能设计选择原因 1.QTableWidget与MVC模式的QTableview的选择 2.处理数据的方式 所以后续将会选择第二种方式,直接操作数据库,并且通过数据库…

公众号怎么转移主体

公众号迁移有什么作用?只能变更主体吗?长期以来,由于部分公众号在注册时,主体不准确的历史原因,或者公众号主体发生合并、分立或业务调整等现实状况,在公众号登记主体不能对应实际运营人的情况下&#xff0…

蓝桥杯前端Web赛道-水果消消乐

蓝桥杯前端Web赛道-水果消消乐 题目链接:2.水果消消乐 - 蓝桥云课 (lanqiao.cn) 题目要求可查看题目文件夹中的effect.gif文件。 下面开始分析题目需要我们做什么 首先显而易见的是,当点到相同的水果的时候,对于的格子消失;如…

论文阅读——Align before Fuse

Align before Fuse: Vision and Language Representation Learning with Momentum Distillation image-text contrastive learning(ITC)用在单模态,masked language modeling (MLM) and image-text matching (ITM) 用在多模态。 单模态编码器的表示上引入了中间图像…

在dpvs上实现ICMP的源进源出

目录 1. 缘起2. 源码分析3. 让ICMP也走源进源出1. 缘起 在网络通信中,当一个请求报文从源主机到达目标主机,并经过中间路由器或交换机进行转发时,请求报文进入主机A的路径和响应报文离开主机A的路径可能不同。这种情况下,就会出现所谓的三角路径问题。如下图: 具体来说,…

精通Linux的磁盘分区:从理论到实战

前言 在这篇技术文章中,我详细介绍了Linux磁盘分区的理论知识,并结合实际示例演示了如何在CentOS 7系统上使用fdisk工具进行磁盘分区和删除操作。无论您是新手还是有一定经验的用户,本文都将帮助您轻松掌握磁盘分区的关键概念和操作技巧。如…

C++:vector类

vector的介绍及使用 1. vector 是表示可变大小数组的序列容器。 2. 就像数组一样, vector 也采用的连续存储空间来存储元素。也就是意味着可以采用下标对 vector 的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的…